※ ChatGPTを利用し、要約された質問です(原文:PHP-SQLiteに於いて、複数列の検索方法を教えてください)
PHP-SQLiteにおける複数列の検索方法
このQ&Aのポイント
PHP-SQLiteにおける複数列の検索方法について教えてください。
データベースの中の複数列を検索する方法を知りたいです。
test.phpで複数列の検索を行うとエラーが発生してしまいます。どうすれば正しく検索できるようになるでしょうか?
PHP-SQLiteに於いて、複数列の検索方法を教えてください
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
とエラー表示が出ます。
そもそも考え違いをしていたらすいません。
どなたかよろしくお願いします。
お礼
回答ありがとうございました。 返事遅くなってすいません。 harutovxご指摘の通りANDが抜けてました。 SQLについてもう少し理解を深めたいと思います。 ありがとうございました。