2012-06-13 128 views
3

我想在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()將返回預期結果。這裏發生了什麼?

回答

3

來自各地的佔位符刪除引號:

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

通過使用一個佔位符,你放棄對具有正確引用字符串或亂猜數值責任。這成爲PDO正確轉義和引用您的投入的業務。

通過留在報價,而不是使用佔位,PDO確實將查詢在title列中的值:article,而不是你傳遞給​​陣列的價值。

+0

可能是我在這裏得到的最快答案。一旦等待10分鐘結束,我會接受它。 – Hassan