phpMyAdmin を使用して次の SQL を手動で実行すると、複数の行が返されます。
SELECT *
FROM bread
WHERE (type LIKE '%hite%' OR type LIKE '%grain%' OR type LIKE '%brown%' )
AND bread_hide = 0
LIMIT 20;
ただし、これを PDO で実行すると、1 つの結果しか返されません。SQL は検索語ごとに動的に作成され、次のようになります。
SELECT * FROM bread WHERE ( type LIKE :q0 OR type LIKE :q1 OR type LIKE :q2 ) AND bread_hide = 0 LIMIT 20;
したがって、ユーザーが「ハイト グレイン ブラウン」と入力すると、次のパラメーターがバインドされます。
:q0 = %hite%
:q1 = %grain%
:q2 = %brown%
手動で実行すると、次の結果が得られます。
white bread
wholegrain
brown bread
私のPHP PDOクエリを実行すると、最後のものだけが得られます:
brown bread
ユーザーが「ハイト グレイン」と入力すると、ill getwholegrain
と notwhite bread
誰かがこれの理由/修正が何であるかを知っていることを願っています、ありがとう!
PHP コード: パラメータをバインドし、クエリを実行し、データを取得する方法は次のとおりです。
$statement_handle = $db_handle->prepare($breadSQL);
foreach($searchWord as $i=>$q) {
$q = "%".$q."%";
$statement_handle->bindParam(":q$i", $q);
}
$statement_handle->execute();
$statement_handle->setFetchMode(PDO::FETCH_ASSOC);
while($row = $statement_handle->fetch())
{
$breadList[] = array('breadName' => $row['bread_name']);
}
固定コード:
foreach($searchWord as $i=>$q) {
$q = "%".$q."%";
$statement_handle->bindValue(":q$i", $q, PDO::PARAM_STR);
}