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

PHP+mySQLで、あるキーワードがDBの中に含まれているかどうかを確認するプログラムを作成しています。

●テーブル情報

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));

どこに問題があるのか、ご指摘のほどよろしくお願いいたします。

●質問者: cochoo
●カテゴリ:ウェブ制作
✍キーワード:CONNECT dB DSN Key MySQL
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● aiaida333
●23ポイント

まず、MYSQLないにホントにデータが入っているか確認しましたか?

データを入れる もんもんは出来ているのですが、

データを表示するプログラムが書いてないと思います。


http://www.yahoo.co.jp

◎質問者からの返答

ご指摘ありがとうございます。質問の中で、ご指摘のプログラムの箇所を書き忘れていました。

$key = '%曜%';

$db = DB::connect($dsn);

$db->query("SELECT * FROM sample WHERE data like ?, array($key));

while ($row = $rs->fetchRow()) { echo $row[0]; }

$rs->free();

上記処理で、なにも表示されませんでした。


2 ● SOBA
●23ポイント

$db->query("SELECT * FROM sample WHERE data like " . $key);

もしかして$keyって配列でスか?

http://q.hatena.ne.jp/answer

◎質問者からの返答

いいえ、$keyは変数です。

$db->query("SELECT * FROM sample WHERE data like " . $key);

…としなかったのは、複数のプレースホルダを指定する処理が他にありまして、同じような書き方にしているためです。

例:

$db->query("SELECT * FROM sampletable WHERE data1=? AND data=?", array($key1, $key2));

ちなみに、ご指摘の方法でも結果は表示されませんでした。

説明不足ですいません。


3 ● horonict
●34ポイント ベストアンサー

問題点

$key = '%曜%';
$db->query("SELECT * FROM sample WHERE data like ?, array($key));
  1. クオーテーションが閉じていません+足りません
  2. プレースホルダが1つの場合は、対応するのは配列ではなく普通の変数です。

改善策

$db->query("SELECT * FROM sample WHERE data like '?';", $key);

http://www.hm-lab.net/archives/category/code

◎質問者からの返答

早速のご指摘ありがとうございます。

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();

解決いたしましたので、これで質問を終了させていただきます。

みなさん、どうもありがとうございました。

関連質問


●質問をもっと探す●



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