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

1

您正在使用准备好的语句。这意味着查询具有将被数据库替换的占位符。这不会修改您的查询字符串。

用于$stmt->debugDumpParams();查看绑定的参数。

于 2015-03-27T10:42:01.210 回答
0

如果您想使用LIKEPDO 进行搜索,您必须有点机智。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 回答