Mysqli没有正确显示错误

时间:2013-04-19 20:52:51

标签: php mysqli

我正在努力学习mysqli,我得到了大部分功能。剩下要做的就是在我的所有图层中进行适当的错误报告。我不明白为什么下面的代码片段检测到错误但不会得到错误号和错误代码。

function get_PID_TID_by_PK($con,$ourId)
{
    $returned['errno'] ="";
    $returned['error'] ="";
    //mistake is over here!!!
    if(!$stmt = $con->prepare("ELECT gene_name,jgi_protein_id,jgi_transcript_id FROM jgi_transid_protid_match where our_protein_id = ?"))
    {
        $returned['errno'] = $con->errno;
        $returned['error'] = $con->error;
        return $returned;
    }

    if(!$stmt->bind_param('s',$ourId))
    {
        $returned['errno'] = $stmt->errno;
        $returned['error'] = $stmt->error;

        return $returned;
    }

    if(!$stmt->execute())
    {
        $returned['errno'] = $stmt->errno;
        $returned['error'] = $stmt->error;

        return $returned;
    }

    $stmt->bind_result($gene_name,$jgi_protein_id,$jgi_transcript_id);
    $stmt->fetch();

    $fetchedArray['gene_name'] = $gene_name;
    $fetchedArray['jgi_protein_id'] = $jgi_protein_id;
    $fetchedArray['jgi_transcript_id'] = $jgi_transcript_id;

    //Have to use this hack since query returns an object and not an array and I don't want to make everything object oriented if you don't know what I am talking about just ignore this comment
    $returned['assoc'] = $fetchedArray;

    return $returned;
}

错误是显而易见的,在第6行,我写了ELECT而不是SELECT,程序进入该块,但错误和错误为空。我做错了什么。如果我没有故意破坏它,这段代码完全正常。

3 个答案:

答案 0 :(得分:0)

您确定IF声明是否正确?

if(!$stmt = $con->prepare("ELECT gene_name,jgi_protein_id,jgi_transcript_id FROM jgi_transid_protid_match where our_protein_id = ?"))
{
    $returned['errno'] = $con->errno;
    $returned['error'] = $con->error;
    return $returned;
}

应该是

if(($stmt = $con->prepare("ELECT gene_name,jgi_protein_id,jgi_transcript_id FROM jgi_transid_protid_match where our_protein_id = ?")) === FALSE)
{
    $returned['errno'] = $con->errno;
    $returned['error'] = $con->error;
    return $returned;
}

或拆分作业

$stmt = $con->prepare("ELECT gene_name,jgi_protein_id,jgi_transcript_id FROM jgi_transid_protid_match where our_protein_id = ?");
if($stmt === FALSE)
{
    $returned['errno'] = $con->errno;
    $returned['error'] = $con->error;
    return $returned;
}

答案 1 :(得分:0)

  

我正在努力学习正确的mysqli

这是你犯的唯一错误。

使用PDO,您的代码将为...... 三行行。它会正确报告所有错误

function get_PID_TID_by_PK($con,$ourId)
{
    $stmt = $con->prepare("ELECT gene_name,jgi_protein_id,jgi_transcript_id FROM jgi_transid_protid_match where our_protein_id = ?");
    $stmt->execute(array($ourId));
    return $stmt->fetch();
}

答案 2 :(得分:0)

最后我决定使用http://www.php.net/manual/en/function.set-error-handler.php。我将重新设计我的代码并让php错误处理程序处理所有错误,我将为我发生的数据库错误制作一个自定义错误。