PHP:stmt-> execute()失败,但错误为空

时间:2014-05-20 16:37:50

标签: php mysql prepared-statement

以下代码片段位于我的php文件中,该文件表示为REST接口。

(...)
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);

每组查询后

。尽管如此,没有错误得到回应。可能是什么问题呢? 〜

更新

就像Linus提到的那样,它是失踪的display_errors()。所以最后我发现这是一个外键的问题。但是由于你的回答,我终于可以调试一些了一些请进入!

1 个答案:

答案 0 :(得分:1)

好的,错误实际上是缺少的display_errors()。只有在声明它之后,脚本才会返回错误的stackstrace。就我而言,这是一个与SQL相关的问题。

以下是剧本的开头:

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