検索ワードの配列を使ってPHP+SQLのSELECT文を作ったがSQLインジェクション対策に失敗
Q&A
Closed
解決したいこと
検索ワードの配列を使ってPHP+SQLのSELECT文をつくり、結果は正しく表示されますが SQLインジェクション対策に対応できていません、アドバイスがありましたらお願いいたします
$Keyword = 'ワード1 ワード2 ワード3';
$KeywordList = mb_split("[ ]", $Keyword);
$countKeyword = count($KeywordList);
for ($i = 0; $i < $countKeyword; $i++) {
if ($i == 0) {
$searchword = "((concat(yoyaku_name,yoyaku_tel,yoyaku_comment) like '%".$KeywordList[$i]."%')";
} else {
$searchword .= " AND (concat(yoyaku_name,yoyaku_tel,yoyaku_comment) like '%".$KeywordList[$i]."%')"
}
}
$searchword .= ")";
try {
$db = new PDO('mysql:dbname='.xxxxx.'; host='.xxxxx.'; charset=utf8', xxxxx, xxxxx);
} catch(PDOException $e) {
echo '接続エラー:' . $e->getMessage();
}
$db->query('SET NAMES utf8');
$stmt = $db->prepare("SELECT * FROM テーブル名 WHERE $searchword order by yoyaku_date desc");
// ↓ これを使ってチャレンジしたが失敗
// $stmt = $db->prepare("SELECT * FROM テーブル名 WHERE :searchword order by yoyaku_date desc");
// $stmt->bindParam(':searchword', $searchword, PDO::PARAM_STR);
$stmt->execute();
foreach ($stmt as $row) {
$row['yoyaku_name']." - ".$row['yoyaku_tel'].." - ".$row['yoyaku_comment']."<br>";
}
チャレンジしたいこと
SELECT文内に変数を使うのはマズいと思い、下記を使って頑張りましたがエラーで出ずに結果が空白でした
$stmt = $db->prepare("SELECT * FROM テーブル名 WHERE :searchword order by yoyaku_date desc");
$stmt->bindParam(':searchword', $searchword, PDO::PARAM_STR);
0