2

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);
}
4

1 に答える 1

0

これらのパラメーターを引用符で使用してみてください

:q0 = '%hite%'
:q1 = '%grain%'
:q2 = '%brown%'
于 2013-03-02T16:48:26.910 に答える