2012-10-14 46 views
3

我已經驗證下面的所有變量,我現在試圖將它們插入使用準備好的語句我的MySQL數據庫,但即使我沒有收到任何系統錯誤的數據未插入。 $ insert_stmt-> affected_rows> 0返回錯誤的,因而顯示我的自定義警告消息:執行在準備好的聲明中不返回任何東西

$insert_stmt = $db->prepare("INSERT INTO users (id,timestamp,externalid,password,authentication,email) VALUES(NULL,NOW(),?,?,?,?)"); 
$insert_stmt->bind_param("ssss",$userid,$hash,$authenticate,$email); 
$insert_stmt->execute(); 
if ($insert_stmt->affected_rows>0) 

我有點新的PHP(和社會),不能弄清楚爲什麼沒有將插入和我自定義警告消息總是顯示?同樣,沒有系統錯誤產生。謝謝!

+1

我建議你告訴PHP來顯示所有的警告和錯誤。在傳遞E_ALL |的腳本開始時調用error_reporting E_STRICT。您可以直接在數據庫中嘗試使用SQL語句來查看是否有任何問題。 – Theraot

+0

會在選擇mysqli與PDO時出現問題嗎?我寫了關於mysqli的這個,所以下面描述的用於PDO的錯誤捕獲技術會花費我一些時間來併入。我沒有收到我希望解決的錯誤。 – vinsanity38

回答

1

我想通了這個問題。我用一個已經在數據庫中的外部id進行了測試,並且我的檢查是否無法正常工作,所以我的代碼到達了插入行,並且試圖在數據庫中已經存在的情況下再次將externalid放入MySQL中。我已經將externalid設置爲唯一字段,因此不允許輸入它。 MySQL雖然在設置E_ALL |時沒有返回任何明顯的錯誤E_STRICT。很高興知道在未來。

我不知道我是用一個重複項測試,很抱歉給社會添加信息的該塊。

3

機會是存在的時候​​被稱爲一個錯誤。​​將返回TRUE如果語句失敗成功和FALSE。所以檢查返回值。如果是FALSE,請致電mysqli_stmt_error()以獲取有關該問題的信息。

1

請執行下列操作:

1)看看這個鏈接:

2)添加這您連接到數據庫後:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

3)A DD在你這個try/catch塊準備,綁定和執行語句:

try { .. } and catch (Exception $e) { echo $e->getMessage(); }

4)報告回來的東西 - 如果有的話 - 你得到錯誤信息

而且是一定檢查錯誤您的通話狀態。特別是$insert_stmt->execute()

+0

謝謝,我會回顧所有這些步驟並回報。對於#4,當錯誤一直開啓時的錯誤聲明只是一些未定義的索引的通知,這些索引在我的代碼的其他位置存在問題。 – vinsanity38