2011-08-18 23 views
2

我用下面的(或類似)的代碼在數百頁的我已經建立:雖然在MySQL的通話循環拋出未知PDO例外「常規錯誤」

$stmt = $db->prepare("SELECT * FROM table"); 
$stmt->execute(); 

while($row = $stmt->fetch()) { 

    $id = $row['id']; 
    $name = $row['name']; 

    do something with data returned... 


    $id = NULL; 
    $name = NULL; 

} 

出nowwhere的,我開始接受了以下幾頁錯誤:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error' in C:....page.php:28 Stack trace: #0 C:..page.php(28): PDOStatement->fetch() #1 {main} thrown

第一個循環將運行(沒有問題),但在第一個循環後發生錯誤。錯誤代碼(第28行)引用行:

while($row = $stmt->fetch()) { 

我從來沒有見過這個之前。作爲測試,我修改了代碼以存儲所有返回的結果,如下所示:

$stmt = $db->prepare("SELECT * FROM table"); 
$stmt->execute(); 

$rows = $stmt->fetchALL(); 

foreach($rows as $row) { 

    $id = $row['id']; 
    $name = $row['name']; 

    do something with data returned... 


    $id = NULL; 
    $name = NULL; 

} 

和系統工作。任何想法爲什麼?

+2

什麼在你的「做某事」部分? –

+1

......哪一條是第28行? – feeela

+0

@feela - 第28行是'while'循環 – JM4

回答

5

注:通過細算 '做一些事情' 區域再次 - 我實現了數據庫的初始化($ SQL)均在選擇相同以及正文中的插入/更新聲明。將這些更改爲唯一值可更正此問題。

謝謝

+0

很酷,現在標記爲你的請接受回答:) – Gerry

+1

@Gerry - 自我解答不能被接受2天。 – JM4

+0

啊,沒有意識到。噢,我猜它必須等待。 :) +1的信息:) – Gerry

3

除非這僅僅是您的問題中的拼寫錯誤,否則您的箭頭操作符不完整。

$stmt>execute(); 

// Should be 
$stmt->execute(); 
+0

以下給出答案+1爲了毆打我由〜13秒= D – Gerry

+0

寫入SO時只有一個錯誤,這是在我的代碼是正確的 - 我會在這裏更新 – JM4

2
$stmt>execute(); 

難道不應該是:

$stmt->execute(); 
+1

評論上面 - 只有在SO發佈錯誤不在我的實際代碼 – JM4