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
搜索的通配符连接到您现在干净的搜索字符串。
我有以下代码:
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
搜索的通配符连接到您现在干净的搜索字符串。