2012-05-22 78 views
0

你好,我試圖讓與PDO的功能,但得到錯誤(新PDO)這裏是我的代碼PDO函數調用setFetchMode

function mail_id($mail){ 
    global $host, $dbname, $user, $pass; 
    $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass); 
    $STH = $DBH->query("select count(from) from messages where from = '$mail'"); 
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
    $row = $STH->fetch(); 
    return $row; 
} 

我想數列從這裏就是出來把我試圖

$mail=mail_id($userid); 
if (0<count($mail['to_viewed'])) {echo "green";} else {echo "gray";} 

這是錯誤

Call to a member function setFetchMode() on a non-object 

請幫助THX

+0

也許你的SQL語句中有錯誤?我不知道你是否可以有一個名爲「from」的列(即'count(from)')。你可能需要用刻度或其他東西來包裝它。 – Quantastical

+0

我有一個名爲FROM – Harinder

+0

的列FROM是SQL中的一個關鍵字。在描述您的列時,您需要用SQL語句中的刻度標記來包裝它。 – Quantastical

回答

1

您需要檢查返回值PDO::query()。在(醜陋的)PHP中,有很多函數返回混合類型的值。在PDO::query()的情況下,返回類型爲PDOStatement或布爾,雖然原型的文件中說,不同的東西:

說明:
PDOStatement PDO::query (string $statement)
...

看起來它總是返回PDOStatement

返回值:
PDO ::查詢()返回一個PDOStatement對象物體,或FALSE的失敗。

糟糕,不是每一種情況!因此,您不能保證返回的值是PDOStatement

正確的原型是:

說明:
mixed PDO::query (string $statement)
...

在你的情況下,查詢是無效的(使用保留關鍵字像爲列名稱),其結果是返回值爲布爾類型的值爲FALSE。布爾值不是一個對象,因此您對$STH->setFetchMode()的調用失敗。

根據您的PDO :: ATTR_ERRMODE你

  • 異常(PDO :: ERRMODE_EXCEPTION),所以你不需要檢查 返回值
  • 警告(PDO :: ERRMODE_WARNING )
  • 沒有(PDO :: ERRMODE_SILENT),所以你必須檢查返回值,errorCode()errorInfo()
相關問題