2009-01-02 118 views
1

我正在將一些代碼從舊的mysql_ *函數更新爲PDO。它連接沒有問題,運行查詢沒有問題,但結果集是空的。 PDO :: query()應該返回一個PDOStatement對象,但我的回報是真實的。沒有錯誤報告。PDO查詢問題

這裏是我的代碼:


try 
{ 
    $DB = new PDO("mysql:host=localhost;dbname=dbname", "user", "pass"); 
    $stmt = $DB->prepare("SELECT * FROM report_clientinfo"); 
    $stmt->execute(); 
}catch(PDOException $e) 
{ 
    echo $e->getMessage() . "\n"; 
} 


echo gettype($stmt) . "\n"; 
if ($stmt) echo "true\n"; 
else echo "false\n"; 

$resultset = $stmt->fetchAll(); 

if(empty($resultset)) 
{ 
    exit("ERROR: getClientInfo query failed."); 
} 

$DB = null; 

print_r($resultset); 

我看到的輸出是:

對象 真正 錯誤:getClientInfo查詢失敗。

任何想法,爲什麼它沒有返回任何結果?

回答

5
object 
true 
ERROR: getClientInfo query failed. 

它看起來對我來說,你的PDOStatement $stmt變量實際上報告是一個對象,而不是「true」。當代碼看到$stmt非空時,它會打印「true」,因爲它是一個對象。

我建議您檢查$stmt->execute()的返回值。你可能有一個SQL錯誤。例如,如果拼寫錯誤表名,或者表中連接到的數據庫「dbname」中不存在,或者您登錄的用戶沒有權限查詢該表。

另請參閱$stmt->errorInfo()以獲取有關發生的任何錯誤的更多詳細信息。

0

我有點不好意思回報我指的是錯誤的DSN。我想這就是爲了在除夕之後幾個小時的睡眠中嘗試學習新東西而得到的。感謝PDOStatement :: errorInfo()方法的提示,我之前沒有注意到它。

+0

沒問題。在短短几個小時的睡眠中,很難做好任何事情 - 除了睡覺! – 2009-01-02 03:37:24