我正在将旧的mysql_query代码转换为PDO参数化查询。这是我到目前为止所拥有的。它似乎没有返回任何东西。我在phpmyadmin中尝试了相同的查询,并在旧代码中使用相同的输入,查询以这些方式返回行。
public function searchArticle($input)
{
$db = new PDO("mysql:host=localhost;dbname=thecorrectdbname", "root", "supersecretpassword");
$statement = $db->prepare("SELECT * FROM news WHERE headline LIKE '%:title%'
OR content LIKE %:content%'
OR author LIKE '%:author%'
ORDER BY id DESC");
$statement->execute(array('title' =>$query,
'content' =>$query,
'author'=>$query));
$result = $statement->fetchAll();
print_r($result);
if (!$result || $statement->rowCount() <= 0)
{
echo'nothing in this array';
return false;
}
return $result;
}
返回
Array ( ) nothing in this array
使用相同的$ db连接我可以设法将数据插入数据库,因此连接正常。
两个问题。
我在这段代码中做错了什么?
假设我会让代码正常工作。 PDO预处理语句返回的$ result对象在结构上与mysql_query $ result对象相同吗?如果没有,我如何将PDO结果集转换为mysql_query结果集?
答案 0 :(得分:3)
您的替换变量将被PDO自动转义和引用,这意味着您不能在引号内添加变量。
更改以下内容:
$statement = $db->prepare("SELECT * FROM news WHERE headline LIKE :title
OR content LIKE :content
OR author LIKE :author
ORDER BY id DESC");
$statement->execute(array('title' =>'%'.$query.'%',
'content' =>'%'.$query.'%',
'author'=>'%'.$query.'%'));
答案 1 :(得分:1)
您正在无效使用占位符。占位符必须用于整体价值。
$statement = $db->prepare("SELECT * FROM news WHERE headline LIKE :title
OR content LIKE :content
OR author LIKE :author
ORDER BY id DESC");
$statement->execute(array('title' =>"%$query%",
'content' =>"%$query%",
'author'=>"%$query%"));