2014-05-20 47 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); 
    // (...) 
相关问题