2010-10-19 69 views
0

我在Linux機器上有PHP 5.2.3,apache2.x,mysql 5.x。事情工作正常,直到昨天。今天早上,突然之間,一個php文件開始拋出「致命錯誤:調用成員函數execute()中的非對象」。我使用PDO(準備,執行,關閉遊標等)。你有沒有遇到過這個問題?請有人知道此問題的解決方法。致命錯誤 - 執行()PHP 5.2.13

非常感謝, [R

+0

當數據庫連接無效時,我在'prepare()'上看到這個錯誤。到目前爲止,我還沒有在'execute()'中看到它。 – JAL 2010-10-19 20:45:20

回答

0

正如Alan所說,問題可能是prepare正在返回false而不是PDOStatement。調試這個最好的方法是打開警告。要做到這一點,把這個代碼,你初始化PDO之後:

$db = new PDO(); // insert the following after this line 
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 

這將意味着一個PHP警告將通過PDO當準備語句失敗得到提升。這應該包含有助於您調試問題的信息。

+0

謝謝LSD,我似乎有錯誤,在我添加上面的行後,我的SQL語句。讓我克服它,看看是否有幫助:)再次感謝! – racky 2010-10-19 21:03:41

+0

謝謝,固定它:) – racky 2010-10-19 21:14:47

2

prepare調用可能失敗。這可能是由於SQL語句無效。

我們需要知道您正在使用哪個庫才能知道更多,但prepare可能返回的是false而不是對象。然後,當您嘗試在返回值上調用execute時,您嘗試在false而不是對象上調用它,導致出現錯誤消息。

如果你echovar_dump你打電話execute的價值,你將能夠看到更多的細節。

+0

準備語句中的SQL無效將產生「SQLSTATE [42000]:語法錯誤或訪問衝突」錯誤,而不是此錯誤。幾乎任何東西都可以成功準備(我剛剛嘗試過「asl aslkjd」,它返回了一個PDO語句對象)。 – JAL 2010-10-19 20:41:12

+0

這取決於正在使用的庫。該SQL錯誤可能被SQL訪問庫或驅動程序轉換爲null或false返回值,這會導致此錯誤。 – 2010-10-19 20:42:22

+0

對,我剛剛在PDO手冊中看到(關於一些使用模擬準備語句的驅動程序,而沒有檢查語法)。我使用與racky相同的設置,雖然(php 5.2.3,Mysql 5.1) - 我想知道爲什麼它會有所不同? – JAL 2010-10-19 20:45:35