0

我正在尝试正确学习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 程序正在进入该块但 errno 和错误为空。我在做什么错。如果我不故意破坏它,这段代码可以正常工作。

4

3 回答 3

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;
}
于 2013-04-19T20:58:39.580 回答
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();
}
于 2013-04-19T21:03:59.460 回答
0

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

于 2013-04-19T21:31:55.400 回答