这个问题在这里已有答案:
如果我尝试搜索('samsung'),以下预备语句将返回无结果。
public function search($searchFor) {
try{
//connect to db
$pdo = $this->_db->connect();
//set up SQL and bind parameters
$sql = "select * from item where itemName like '%:searchfor%' or description like '%:searchfor%'";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':searchfor', $searchFor, PDO::PARAM_STR);
//execute SQL
$rows = $this->_db->executeSQL($stmt);
return $rows;
}
catch (PDOException $e)
{
throw $e;
}
}
$ 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);
据我记得手册一样,需要在变量中包含整个字符串,而不仅仅是要处理的内容。
八月
准备好的语句的占位符告诉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);