我想创建一个网站的搜索功能,并创建了从PHPMYADMIN生成的SQL代码,见下文;PHP的PDO和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
在搜索中有这个词,所以它被传递给查询。
当我改变%:SessionName1%
到football
这是搜索词我与测试,代码返回的结果不错,但一旦变回:SessionName1
它不会返回结果,即使搜索词是完全一样的。
任何人都可以看到我做错了什么,我花了很多年看着这个,看不到错误。
我到处搜索了一个这个问题的答案,但是我找不到一个针对这个问题的具体问题,我也是一个初学PHP和SQL的人。
可能是你在'$语句输入错误 - > bindValue( ':SessionName1',$ SessionName1,PDO :: PARAM_STR);'...有你'绑定地方SessionName1'代替SESSIONNAME的' '在字符串中...即,这必须是这样的:'$ stmt - > bindValue(':SessionName',$ SessionName1,PDO :: PARAM_STR);' – Wizard
你必须使用正确的sessionName。 – Monty
[占位符只能表示一个完整的数据字面量 - 即一个字符串或一个数字。](https://phpdelusions.net/pdo#like) –