PDO访存总是返回false在PHP

问题描述:

我想在PHP中使用PDO运行一个简单的查询。该代码非常简单:PDO访存总是返回false在PHP

try { 

    $sql_query = "select * from Articles where title=':article'"; 
    $dbh = get_PDO_connection(); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $stmt = $dbh->prepare($sql_query); 
    $stmt->execute(array(':article' => "MD Example")); 
    var_dump($stmt); 
    $row = $stmt->fetch(); 
    //if($row==null)return 'null'; 
    var_dump($row); 
} catch (PDOException $e) { 
    print $e->getMessage(); 
} 

var_dump($stmt)始终打印:

object(PDOStatement)#3 (1) { ["queryString"]=> string(45) "select * from Articles where title=':article'" } 

...不管我投入​​,没有抛出异常。而且,如标题所示,fetch()总是返回false。你应该知道,如果我将SQL查询“硬编码”到字符串中,所有这些都可以正常工作。换句话说,如果我将$sql_query设置为“select * from Articles where title ='MD Example'”,那么fetch()将返回预期结果。这里发生了什么?

来自各地的占位符删除引号:

$sql_query = "select * from Articles where title=:article"; 
//---------------------------------------------^^^^^^^^^^^ 

通过使用一个占位符,你放弃对具有正确引用字符串或乱猜数值责任。这成为PDO正确转义和引用您的投入的业务。

通过留在报价,而不是使用占位,PDO确实将查询在title列中的值:article,而不是你传递给​​阵列的价值。

+0

可能是我在这里得到的最快答案。一旦等待10分钟结束,我会接受它。 – Hassan