この人頭いいなと思ったエピソード

SQLiteの複数列の検索

SQLiteの勉強を始めたばかりなのですが、
複数列の検索方法が解らなくて、
色々調べましたが解らなかったので質問させてください。

データベースの中が
|ID  |  氏名  |  住所       |  電話番号
|----|-------|--------------|---------------
|1  |山田   |埼玉県******** |03********
|2  |田中   |東京********** |03********
|3  |佐藤   |千葉県******** |090********
|4  |佐々木  |埼玉県******** |090********
-----------------------------------------------------
期待する動き
例1)
住所:埼玉県
と検索すると
山田,埼玉県********,03********
佐々木,埼玉県********,090********
と表示される

例2)
名前:山田
住所:埼玉県
と検索すると
山田,埼玉県********,03********
と表示される
※ユーザーからはどの項目を検索対象とされるか解らない。

test.phpの内容

//フォームからID取得
$search_id = $_POST['id'];

//フォームから氏名取得
$search_user_name = $_POST['search_user_name'];

//フォームから住所取得
$search_home_address = $_POST['search_home_address'];

//フォームから電話番号取得
$search_tel_num = $_POST['search_tel_num'];

//フォームからの入力データを格納
$chk_data = "$search_id,$search_user_name,$search_home_address,$search_tel_num";

//比較する列名配列変更用カウント変数
$i = 0;

//比較する列名
$chk_db_line = array("id",
"user_name",
"home_address",
"tel_num");

//データベース列名格納
$all_data = "id,user_name,home_address,tel_num";

//ユーザーが入力した検索項目をカンマ区切りで配列に格納
foreach($chk_line as $chk_ln){

//ユーザーが入力した検索項目をチェック
if( ($chk_ln === "") || ($chk_ln === NULL) ){

//比較する列名配列変更用カウント変数インクルメント
$i++;

//ユーザーが入力した検索項目をチェックし値が入っている場合
}else{

//sqlite文の$query = WHERE以降を変数に代入
//ユーザーが入力した検索項目の個数は可変のため
$sqlite_str .= $chk_db_line[$i]. " LIKE ". "'%". $chk_ln. "%' ";

//比較する列名配列変更用カウント変数インクルメント
$i++;
}
}

//設定項目がなければ検索しない
if(!$sqlite_str){
echo "検索項目が設定されていません。";

//設定項目あれば検索する
}else{

//データベースオープン
if($db = sqlite_open('./db/Personal_data')){

//検索
$query = "SELECT ".$all_data ." FROM tb1_personal_data WHERE ".$sqlite_str;
$result = sqlite_query($db, $query);

//検索結果表示
while($info = sqlite_fetch_array($result)){

echo "<tr>";
echo "<td>氏名</td><td align='left'>{$info['user_name']} </td>";
echo "</tr>";

echo "<tr>";
echo "<td>氏名</td><td align='left'>{$info['home_address']} </td>";
echo "</tr>";

echo "<tr>";
echo "<td>氏名</td><td align='left'>{$info['tel_num']} </td>";
echo "</tr>";
}

//データベースクローズ
sqlite_close($db);
}
}

とすると、単体検索は成功しましたが、複数検索を行うとエラーが表示される
検索フォームから検索
例1)
住所:埼玉県
と検索すると
山田,埼玉県********,03********
佐々木,埼玉県********,090********
と表示される
成功

例2)
名前:山田
住所:埼玉県
と検索すると
Warning: sqlite_query() [function.sqlite-query]: near "home_address": syntax error in

Warning: sqlite_fetch_array() expects parameter 1 to be resource, boolean given in

とエラー表示が出ます。
そもそも考え違いをしていたらすいません。
どなたかよろしくお願いします。

A 回答 (1件)

$result = sqlite_query($db, $query);


の前の$queryをprintしてみればわかると思うけど、ANDが抜けているんだと思うよ。
SQLについてもう少し理解を深めた方がいいと思う。
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
返事遅くなってすいません。

harutovxご指摘の通りANDが抜けてました。
SQLについてもう少し理解を深めたいと思います。
ありがとうございました。

お礼日時:2009/05/25 10:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報