PDO参数化查询不返回任何内容

时间:2013-12-06 16:19:35

标签: php mysql pdo parameterized-query

我正在将旧的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连接我可以设法将数据插入数据库,因此连接正常。

两个问题。

  1. 我在这段代码中做错了什么?

  2. 假设我会让代码正常工作。 PDO预处理语句返回的$ result对象在结构上与mysql_query $ result对象相同吗?如果没有,我如何将PDO结果集转换为mysql_query结果集?

2 个答案:

答案 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%"));