PHP PDO bindParam 不修改查询

PHP PDO bindParam doesn't modify the query

我有以下代码:

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 %

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

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

如果你想使用 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 搜索的通配符连接到您现在干净的搜索字符串。