0

次のコードがあります。

if(isset($_GET['q'])){
    $sql = "SELECT klantnr, persnr, naam, voornaam FROM gegevens WHERE voornaam LIKE % :voorwaarde % OR naam LIKE % :voorwaarde %";

    $stmt = $db->prepare($sql);
    $stmt->bindParam(':voorwaarde', $_GET['q']);
    $stmt->bindParam(':voorwaarde', $_GET['q']);
    echo $stmt->queryString;
    $stmt->execute();
    $pers = $stmt->fetchAll();
    print_r($pers);
}

ただし、queryString 関数から表示されるクエリは次のとおりです。

SELECT klantnr, persnr, naam, voornaam FROM gegevens WHERE voornaam LIKE % :voorwaarde % OR naam LIKE % :voorwaarde %
4

2 に答える 2

0

PDO で検索を使用する場合はLIKE、少し機知に富む必要があります。PDO が行うことは、文字列を引用することです。それはあなたにとって何を意味しますか?% :term %これは、有効な SQL ではないことを意味します。

適切な SQL を取得し、入力文字列を正しく消去するには、次を使用します。

$sql = "SELECT klantnr, persnr, naam, voornaam FROM gegevens WHERE voornaam LIKE CONCAT('%', :voorwaarde, '%') OR naam LIKE CONCAT('%',  :voorwaarde,  '%')";

上記が行うことは、検索用のワイルドカードをLIKE、今ではクリーンな検索文字列に連結することです。

于 2015-03-27T11:15:48.327 に答える