[英]PHP PDO & SQL Search wildcard bind parameters
我正在尝试为网站创建搜索功能,并创建了从PHPMYADMIN生成的sql代码,请参见下文;
$sql = "SELECT * FROM `bg85ow`.`sessions` WHERE CONVERT(`SessionName` USING utf8) LIKE '%:SessionName1%'";
这是处理查询的PHP代码;
//bind params
$SessionName1 = filter_input(INPUT_GET, 'search');
$stmt -> bindValue(':SessionName1', $SessionName1, PDO::PARAM_STR);
//execute
$success = $stmt -> execute();
if (!$success){
print $stmt->errorInfo()[2]; //PDO driver error message
}
else{
}
//array
$r = $stmt->fetchAll(PDO::FETCH_ASSOC);
$dbh = null;
if(!$r)
{
echo "No Results";
}
foreach ((array) $r as $row) {
echo $row['SessionId'];
echo $row['SessionName'];
}
由于某种原因,这不会返回任何结果, execute
部分可以正常工作并通过成功测试,但是一旦到达数组,它就不会返回任何结果。
我检查了一下, $SessionName1
有来自搜索的术语,因此将其传递给查询ok。
当我将%:SessionName1%
更改为football
,这是我要测试的搜索词,代码返回的结果很好,但是一旦更改回:SessionName1
,即使搜索词完全相同,也不会返回结果。
谁能看到我在做什么错,我花了很长时间才看到这个错误,却看不到错误。
我到处都在搜索有关此问题的答案,但是找不到特定于此问题的答案,而且我还是PHP和SQL的初学者。
尝试以下示例:检查您在哪里错了。
// Get the keyword from query string
$keyword = $_GET['keyword'];
// Prepare the command
$sth = $dbh->prepare('SELECT * FROM `users` WHERE `firstname` LIKE :keyword');
// Put the percentage sing on the keyword
$keyword = "%".$keyword."%";
// Bind the parameter
$sth->bindParam(':keyword', $keyword, PDO::PARAM_STR);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.