2014-05-20 73 views
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一些請求!

+3

'error_reporting'還不是全部。那麼'display_errors'呢?它也需要設置。 –

+0

確保每個列的類型都是正確的,表單元素(如果有)不包含拼寫錯誤並且名稱正確。 POST變量(如果有的話)區分大小寫。確保所有列都存在,並且您正在選擇正確的表格。它可能是一些數字和可能的事物/因素的組合。然而,每當我看到'$ desc'時就會畏縮,這告訴我你可能正在使用一個MySQL保留字['DESC'](http://dev.mysql.com/doc/refman/5.5/en/reserved- words.html)。要顯示錯誤,除了你目前使用的內容外,還要使用'ini_set('display_errors',1);'。 –

+1

另外,最好選擇要插入的實際列。你現在正在做的就像晚上打一堆高爾夫球,希望他們能夠進入正確的洞。 –

回答

1

好的,所以錯誤實際上是缺少的display_errors()。只有在聲明該腳本之後,該腳本纔會返回錯誤的堆棧。就我而言,這是一個SQL相關的問題。

以下是腳本的開始:

<?php 
    ini_set("display_errors", 1); 
    ini_set("track_errors", 1); 
    ini_set("html_errors", 1); 
    error_reporting(E_ALL); 
    // (...) 
相關問題