Php SQL prepared语句不返回结果(空结果)

Php SQL prepared语句不返回结果(空结果),php,sql,pdo,Php,Sql,Pdo,如果我尝试like search('samsung'),下面的prepared语句将不会返回任何结果 $rows返回一个空数组。但是如果我尝试 select * from item where itemName like '%samsung%' or description like '%samsung%; 它返回一个匹配的项并按预期工作 我发现 $sql = "select * from item where itemName like :searchfor or description l

如果我尝试like search('samsung'),下面的prepared语句将不会返回任何结果

$rows返回一个空数组。但是如果我尝试

select * from item where itemName like '%samsung%' or description like '%samsung%;
它返回一个匹配的项并按预期工作

我发现

$sql = "select * from item where itemName like :searchfor or description like :searchfor";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(":searchfor", "%$searchFor%");

工作。我不得不改用bindValue。这是一个完全不同的问题,因为SQL是正确的,但我使用了bindParam而不是bindValue(这是正确的方法),因此这不是重复的。

您是否尝试对语句的整个部分使用占位符

$sql = "select * from item where itemName like :searchfor or description like :searchfor";
$stmt = $pdo->prepare($sql);
$search_string = "'%" . $searchFor . "'%";
$stmt->bindParam(':searchfor', $search_string, PDO::PARAM_STR);
可选,不带命名参数:

$sql = "select * from item where itemName like ? or description like ?";
$stmt = $pdo->prepare($sql);
$search_string = "'%" . $searchFor . "'%";
$stmt->bindParam('ss', $search_string, $search_string);
就我所记得的手册而言,需要在变量中保存整个字符串,而不仅仅是要处理的内容


Aug

准备好的语句的占位符告诉php将传递到占位符中的特定值作为字符串处理。与此相反:

$sql = "select * from item where itemName like '%:searchfor%' or 
description like '%:searchfor%'";
这样做:

$sql = "select * from item where itemName like :searchfor or 
description like :searchfor";
然后将整个值绑定到占位符中:

$stmt->bindParam(':searchfor', '%yourkeyword%', PDO::PARAM_STR);

您的第二个
bindParam
调用错误。这是PDO,不是MySQLi。此外,除非
PDO::ATTR\u EMULATE\u PREPARES
必须使用bindValue,否则不能重复使用命名参数
$stmt->bindParam(':searchfor', '%yourkeyword%', PDO::PARAM_STR);