人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MDB2でプリペアドステートメントやプレースホルダを使用して
IN句の中にクォートした値を用いることは可能でしょうか。

イメージだと
$array = array('a','b','c');
$mdb2->extended->getRow("SELECT * FROM table WHERE column IN (?)", null, $array);
ってやると
SELECT * FROM table WHERE column IN ('a','b','c')
ってなるような感じです。arrayの数は可変で。

環境はPHP5+MDB2でDBはMySQL5です。

●質問者: krese
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:dB MDB2 SELECT イメージ クォート
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● minkpa
●35ポイント

http://pear.php.net/manual/ja/html/package.html.html-template-si...


2 ● sunaoka
●35ポイント

ぜんぜんスマートではないですが、先にプレースホルダを作ってしまえば大丈夫そうです。

<?php

$array = array('a', 'b', 'c');
$holder = implode(',', array_fill(0, count($array), '?'));
$mdb2->extended->getRow("SELECT * FROM `table` WHERE `column` IN ($holder)", null, $array);

上記の場合は

SELECT * FROM `table` WHERE `column` IN (?,?,?)

をあらかじめ作ってしまうという感じですね。

これでとりあえず取得はできます。


ちなみに、mysql のログには以下のように表示されます (正常ですね)。

32 Query PREPARE MDB2_STATEMENT_mysql_6e51ad0f4d6642dea3fcf10d006c84ce FROM 'SELECT * FROM `table` WHERE `column` IN (?,?,?)'
32 Prepare [1] SELECT * FROM `table` WHERE `column` IN (?,?,?)
32 Query SET @0 = 'a'
32 Query SET @1 = 'b'
32 Query SET @2 = 'c'
32 Query EXECUTE MDB2_STATEMENT_mysql_6e51ad0f4d6642dea3fcf10d006c84ce USING @0, @1, @2
32 Execute [1] SELECT * FROM `table` WHERE `column` IN (@'0',@'1',@'2')
32 Query DEALLOCATE PREPARE MDB2_STATEMENT_mysql_6e51ad0f4d6642dea3fcf10d006c84ce
32 Quit
◎質問者からの返答

なるほど!

こんなやり方あったんですねー。

若干バッドっぽいですが、使わせていただきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ