●テーブル情報
create table sample ( data varchar(32) not null );
insert into sample (data) value ('日曜日'); … ①
insert into sample (data) value ('みかん'); … ②
insert into sample (data) value ('木曜日'); … ③
●動作結果
まずは、MySQL上でやりたいこと。これは、期待通りの動作(①と③が表示)を行います。
SELECT * FROM sample WHERE data like '%曜%;
次にPHP上で実現したいのですが、なにも検索されず困っています。
$key = '%曜%';
$db = DB::connect($dsn);
$db->query("SELECT * FROM sample WHERE data like ?, array($key));
どこに問題があるのか、ご指摘のほどよろしくお願いいたします。
$key = '%曜%';
$db->query("SELECT * FROM sample WHERE data like ?, array($key));
$db->query("SELECT * FROM sample WHERE data like '?';", $key);
まず、MYSQLないにホントにデータが入っているか確認しましたか?
データを入れる もんもんは出来ているのですが、
データを表示するプログラムが書いてないと思います。
ご指摘ありがとうございます。質問の中で、ご指摘のプログラムの箇所を書き忘れていました。
$key = '%曜%';
$db = DB::connect($dsn);
$db->query("SELECT * FROM sample WHERE data like ?, array($key));
while ($row = $rs->fetchRow()) { echo $row[0]; }
$rs->free();
上記処理で、なにも表示されませんでした。
$db->query("SELECT * FROM sample WHERE data like " . $key);
もしかして$keyって配列でスか?
いいえ、$keyは変数です。
$db->query("SELECT * FROM sample WHERE data like " . $key);
…としなかったのは、複数のプレースホルダを指定する処理が他にありまして、同じような書き方にしているためです。
例:
$db->query("SELECT * FROM sampletable WHERE data1=? AND data=?", array($key1, $key2));
ちなみに、ご指摘の方法でも結果は表示されませんでした。
説明不足ですいません。
$key = '%曜%';
$db->query("SELECT * FROM sample WHERE data like ?, array($key));
$db->query("SELECT * FROM sample WHERE data like '?';", $key);
早速のご指摘ありがとうございます。
1に関しては記述ミスです。
2に関しては仰るとおりですが、先述の通り汎用関数化のため、1つの引数でも配列を使用していました。
array($key)と$key[0]は同じ解釈と思っていました。
原因は、日本語コードの問題でした(初歩的ミスで申し訳ありません)
プログラムは以下でちゃんと動作しています。
$db = DB::connect($dsn);
$rs = $db->query("SELECT * FROM sample WHERE data like ?, array($key));
while ($row = $rs->fetchRow()) { echo $row[0]; }
$rs->free();
解決いたしましたので、これで質問を終了させていただきます。
みなさん、どうもありがとうございました。
早速のご指摘ありがとうございます。
1に関しては記述ミスです。
2に関しては仰るとおりですが、先述の通り汎用関数化のため、1つの引数でも配列を使用していました。
array($key)と$key[0]は同じ解釈と思っていました。
原因は、日本語コードの問題でした(初歩的ミスで申し訳ありません)
プログラムは以下でちゃんと動作しています。
$db = DB::connect($dsn);
$rs = $db->query("SELECT * FROM sample WHERE data like ?, array($key));
while ($row = $rs->fetchRow()) { echo $row[0]; }
$rs->free();
解決いたしましたので、これで質問を終了させていただきます。
みなさん、どうもありがとうございました。