2012-01-04 76 views
1

我的代碼:錯誤處理對於PDO :: ATTR_EMULATE_PREPARES =>假

$st = $conn->prepare('abc'); 
echo "emulate is : " . $st->getAttribute(PDO::ATTR_EMULATE_PREPARES) . "<br />"; 

$sql = "SELECT count(*) FROM traceuser WHERE username=? ORDER BY gg DESC"; 
$q = $conn->prepare($sql); 
$result = $q->execute(array("zac1987")); 
$number_of_rows = $q->fetchColumn(); 
if($result){ 
    echo "sql query successful"; 
}else{ 
    echo "sql query fail. "; 
    print_r ($q->errorInfo()) ; 
} 


輸出如果PDO::ATTR_EMULATE_PREPARES => true
仿真是:1個
SQL查詢失敗。陣列([0] => 00000 [1] => 1054 [2] =>未知列在 'order子句' 'GG')


如果PDO::ATTR_EMULATE_PREPARES => false輸出:
致命錯誤:調用一個成員函數getAttribute()在非對象上在/home/aekcom/public_html/test-countResult-fakePS.php上行33

致命錯誤:調用一個成員函數execute()第41行的/home/aekcom/public_html/test-countResult-fakePS.php

問題:
爲什麼getAttribute()不工作如果PDO::ATTR_EMULATE_PREPARES => false?我如何檢查模擬的價值?或者如何讓它顯示「模擬是:0」?

如何使PDO::ATTR_EMULATE_PREPARES => false顯示等代替「功能的execute()一個非對象的」「未知列‘GG’」錯誤消息的更多細節?

回答

1

在行:

$conn->prepare('abc'); 

你必須在SQL 「ABC」(非常糟糕)語法錯誤。通過仿真,在準備時沒有錯誤檢查,並且執行失敗。如果沒有模擬,你的準備失敗,$ st是空或虛假或任何。