1
以下代碼片段位於我的php文件中,它被視爲REST界面。PHP:stmt-> execute()失敗,但錯誤爲空
(...)
if ($stmt = $connection->prepare("INSERT INTO Resource VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)")){
$stmt->bind_param("sssssssii", $email, $timestamp, $title, $desc, $lat, $lng, $alt, $full, $cat);
// 1)
if($stmt->execute()){
// insertion of Resource successful
// 2)
}else{
// insertion of Resource failed
echo "INSERTION_RESOURCE_FAILED";
$stmt->close();
die;
}
(...)
正確執行的以前的版本沒有兩個附加的整數字段作爲參數。我通過在那裏放置回聲來「調試」php文件。在位置1)我收到了回聲,在位置2)沒有。這對我意味着stmt-> execute()失敗。但是,如果失敗了,爲什麼我沒有收到else塊的回聲呢?我怎樣才能更好地調試這些問題?請注意,我檢查了POST值,它們是正確的。
我也宣告
error_reporting(E_ALL);
<?php
之後,和
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
每組查詢後。儘管如此,沒有錯誤被迴應。可能是什麼問題呢? 〜
UPDATE
像萊納斯提到,它是缺失的display_errors()
。所以最後我發現這是一個外鍵問題。但是,由於你的回答,我終於可以調試php一些請求!
'error_reporting'還不是全部。那麼'display_errors'呢?它也需要設置。 –
確保每個列的類型都是正確的,表單元素(如果有)不包含拼寫錯誤並且名稱正確。 POST變量(如果有的話)區分大小寫。確保所有列都存在,並且您正在選擇正確的表格。它可能是一些數字和可能的事物/因素的組合。然而,每當我看到'$ desc'時就會畏縮,這告訴我你可能正在使用一個MySQL保留字['DESC'](http://dev.mysql.com/doc/refman/5.5/en/reserved- words.html)。要顯示錯誤,除了你目前使用的內容外,還要使用'ini_set('display_errors',1);'。 –
另外,最好選擇要插入的實際列。你現在正在做的就像晚上打一堆高爾夫球,希望他們能夠進入正確的洞。 –