我在Linux機器上有PHP 5.2.3,apache2.x,mysql 5.x。事情工作正常,直到昨天。今天早上,突然之間,一個php文件開始拋出「致命錯誤:調用成員函數execute()中的非對象」。我使用PDO(準備,執行,關閉遊標等)。你有沒有遇到過這個問題?請有人知道此問題的解決方法。致命錯誤 - 執行()PHP 5.2.13
非常感謝, [R
我在Linux機器上有PHP 5.2.3,apache2.x,mysql 5.x。事情工作正常,直到昨天。今天早上,突然之間,一個php文件開始拋出「致命錯誤:調用成員函數execute()中的非對象」。我使用PDO(準備,執行,關閉遊標等)。你有沒有遇到過這個問題?請有人知道此問題的解決方法。致命錯誤 - 執行()PHP 5.2.13
非常感謝, [R
正如Alan所說,問題可能是prepare
正在返回false
而不是PDOStatement
。調試這個最好的方法是打開警告。要做到這一點,把這個代碼,你初始化PDO之後:
$db = new PDO(); // insert the following after this line
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
這將意味着一個PHP警告將通過PDO當準備語句失敗得到提升。這應該包含有助於您調試問題的信息。
你prepare
調用可能失敗。這可能是由於SQL語句無效。
我們需要知道您正在使用哪個庫才能知道更多,但prepare
可能返回的是false
而不是對象。然後,當您嘗試在返回值上調用execute
時,您嘗試在false
而不是對象上調用它,導致出現錯誤消息。
如果你echo
或var_dump
你打電話execute
的價值,你將能夠看到更多的細節。
準備語句中的SQL無效將產生「SQLSTATE [42000]:語法錯誤或訪問衝突」錯誤,而不是此錯誤。幾乎任何東西都可以成功準備(我剛剛嘗試過「asl aslkjd」,它返回了一個PDO語句對象)。 – JAL 2010-10-19 20:41:12
這取決於正在使用的庫。該SQL錯誤可能被SQL訪問庫或驅動程序轉換爲null或false返回值,這會導致此錯誤。 – 2010-10-19 20:42:22
對,我剛剛在PDO手冊中看到(關於一些使用模擬準備語句的驅動程序,而沒有檢查語法)。我使用與racky相同的設置,雖然(php 5.2.3,Mysql 5.1) - 我想知道爲什麼它會有所不同? – JAL 2010-10-19 20:45:35
當數據庫連接無效時,我在'prepare()'上看到這個錯誤。到目前爲止,我還沒有在'execute()'中看到它。 – JAL 2010-10-19 20:45:20