【发布时间】:2019-07-16 04:05:32
【问题描述】:
如果我尝试类似 search('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(这是正确的方法),因此这不是重复的。
【问题讨论】:
-
我不得不改用 bindValue