phpで検索ページを作りDBから条件通りのレコードを抽出したい
DBのデータを抽出できる検索ページを作りました。(index.php)
ただ、条件を指定してもその条件通りのレコードを上手くDBから引っ張って来れません、、、
[実現したいこと]
以下の検索フォーム(index.html)にて、検索した条件とマッチするにレコードをブラウザに表示させたいです。
[うまくいっていること]
print $sql.";<br>".PHP_EOL;
print_r($data);
上記の結果は以下の通りブラウザに表示されます。(都道府県->東京、分類->保育園で指定した場合)
SELECT * FROM zenkoku where 1AND prefecture = ? AND type = ? ;
Array ( [0] => 東京都 [1] => 保育園 )
[うまくいかないこと]
上記の[うまくいっていること]の場合でもそのほかの場合でも下記のようなエラーが出ます。
Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'prefecture = '東京都' AND type = '保育園'' at line 1
[教えて欲しいこと]
エラーがなぜ出ているかと、その原因をご教示いただけますか?
[環境]
ローカル開発環境、MacOSX,mysql
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<tittle>入力フォーム</title>
</head>
<body>
<form method="post" action="SEARCH_Show.php"><br>
名称<br>
<input type="text" name="name" size="60" maxlength="30" value=""><br>
電話番号<br>
<input type="tel" name="tel" size="30" maxlength="12" value=""><br>
担当者名<br>
<input type="text" name="person_name" size="30" maxlength="20"
value=""><br>
都道府県<br>
<select name="prefecture"><br>
<option value="全て">全て</option>
<option value="東京都">東京都</option>
<option value="神奈川県">神奈川県</option>
<option value="千葉県">千葉県</option>
<option value="埼玉県">埼玉県</option>
<option value="北海道">北海道</option>
<option value="宮城県">宮城県</option>
<option value="愛知県">愛知県</option>
<option value="大阪府">大阪府</option>
<option value="福岡県">福岡県</option>
</select><br>
市区町村<br>
<input type="text" name="city" size="30" maxlength="30" value=""><br>
分類<br>
<select name="type"><br>
<option value="全て">全て</option>
<option value="保育園">保育園</option>
<option value="幼稚園">幼稚園</option>
<option value="サークル">サークル</option>
<option value="その他">その他</option>
</select><br>
<button type="submit" class="">検索</button>
</form>
</body>
</html>
index.php
<?php
require 'Manager.php';
require 'Escape.php';
ini_set('display_errors',1);
?>
<!DOCTYPE html>
<html lang = "ja">
<head>
<meta charset ="UTF-8">
<tittle>登録ページ</tittle>
</head>
<body>
<table border='1' class="TableStyle1" width="1000">
<tr>
<th>名称</th>
<th>都道府県</th>
<th>市区町村</th>
<th>番地</th>
<th>区分</th>
<th>電話番号</th>
<th>担当者名</th>
<th>部数</th>
<th>設置/配布</th>
<th>消去</th>
</tr>
<?php
try{
$db = connect();
$name=filter_input(INPUT_POST,'name');
$tel=filter_input(INPUT_POST,'tel');
$person_name=filter_input(INPUT_POST,'person_name');
$prefecture=filter_input(INPUT_POST,'prefecture');
$city=filter_input(INPUT_POST,'city');
$type=filter_input(INPUT_POST,'type');
if(!is_null($name)){
$sql = "SELECT * FROM zenkoku where 1";
$data=[];
}
if($name!==""){
$sql.="AND name = ?" ;
$data[]=$name;
}
if($tel!==""){
$sql.= "AND tel = ? ";
$data[]=$tel;
}
if($person_name!==""){
$sql.= "AND person_name = ? ";
$data[]=$person_name;
}
if($prefecture!=="全て"){
$sql.= "AND prefecture = ? ";
$data[]=$prefecture;
}
if($city!==""){
$sql.= "AND city = ? ";
$data[]=$city;
}
if($type!==""){
$sql.= "AND type = ? ";
$data[]=$type;
}
print $sql.";<br>".PHP_EOL;
print_r($data);
$stmt = $db->prepare($sql);
$stmt->execute($data);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
?>
<tr>
<td><?php es($row['name']);?></td>
<td><?php es($row['prefecture']);?></td>
<td><?php es($row['city']);?></td>
<td><?php es($row['address']);?></td>
<td><?php es($row['type']);?></td>
<td><?php es($row['tel']);?></td>
<td><?php es($row['person_name']);?></td>
<td><?php es($row['copies']);?></td>
<td><?php es($row['set_type']);?></td>
</tr>
<?php
}
}catch(PDOException $e){
echo $e->getMessage();
exit;
}
?>
</table>
</body>
</html>