こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

解決済みの質問

MDB2のプリぺアドステートメントについて

MDB2のプリぺアドステートメントを使用してテーブルデータを取得する際に、
下記のように、$types で型指定をするのが一般的のようですが、
この型指定をせずにデータを取得する事は可能なのでしょうか?
(公式マニュアルでは指定したものしか見当たらなかったもので…)
-------------------------------------------
$sql = "select * from table where id = ? and name = ?";
$types = array('integer', 'text');
$sth = $mdb2->prepare($sql, $types, MDB2_PREPARE_RESULT);
$data = array(1, 'hoge');
$res = $sth->execute($data);
-------------------------------------------
また、指定せずに取得出来るのであれば、
指定した場合と指定しなかった場合で何が違うのかも教えて頂けると幸いです。

以上、よろしくお願い致します。

投稿日時 - 2015-02-24 01:18:24

QNo.8923595

困ってます

質問者が選んだベストアンサー

>公式マニュアルでは指定したものしか見当たらなかったもので…

サンプルソースはそうかもしれませんが、マニュアル自体にちゃんと記述があります。

RTFM.
http://pear.php.net/manual/ja/package.database.mdb2.intro-execute.php
----- 引用ここから
デフォルトでは、すべてのプレースホルダは 文字列として扱われます。しかし、二番目のパラメータとして データ型 の配列を渡すと、 各プレースホルダの型を指定できるようになります。
----- 引用ここまで

第二引数を省略した場合には、文字列型として扱われます。

PDOなどでもそうなっています(bindParamせずに直接executeで配列を渡すケース)。MySQLでは困ることはなかった気がしますが、いつまでも大丈夫だとかすべてのRDBMSで問題ないとか誰も保証出来ません。「キチンと書く」のが基本です。

投稿日時 - 2015-02-24 08:20:16

お礼

ありがとうございます!
以下、どちらでも問題無く動作しました。。(MySQLです)

$sth = $mdb2->prepare($sql, null, MDB2_PREPARE_RESULT);
$sth = $mdb2->prepare($sql, array(), MDB2_PREPARE_RESULT);

本来推奨すべきでは無いのでしょうが、こういった記述もあり、という事ですね。

投稿日時 - 2015-02-24 11:32:17

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

-広告-
-広告-

あなたにオススメの質問

-広告-
-広告-