prepare语句返回false但成功插入

时间:2016-10-22 02:44:16

标签: php mysql prepared-statement

我还是PHP和MYSQL的新手,当我运行prepare语句向数据库插入一些数据时,它返回false,但是我可以看到数据库中的新行,有谁知道为什么?我感谢任何帮助。我花了几个小时来计算,但没有运气。它只发生在INSERT语句中。它 这是我的代码

  function cleanQuery($prepareState,$Arrs)
{
    global $dbcon;
    $refArr=array();
    $res=$dbcon->prepare($prepareState);
    $ref= new ReflectionClass('mysqli_stmt');
    $method=$ref->getMethod("bind_param"); 
    foreach($Arrs as $key => &$value)
    {$refArr[] = &$value;
    }
    $method->invokeArgs($res,$refArr); 
    $res->execute();
    $result=$res->get_result();
    return $result;
}

这是准备声明的功能

CREATE TABLE BbUsers(
u_userid INTEGER PRIMARY KEY AUTO_INCREMENT ,
u_username CHAR(60) UNIQUE   ,
u_passhash CHAR(100) ,
u_emailaddr CHAR(255) UNIQUE ,
u_created TIMESTAMP ,
u_lastlogin TIMESTAMP ,
u_validate CHAR(40),
INDEX (u_username , u_emailaddr)
);

我试图从$ res和$ dbcon获取错误信息,它返回0。 这里的数据库看起来像

public String toString(){
    String stringVal = "[";
    if(root != null){
        stringVal+=getChildNoteString(root);
    }

    return stringVal+"]";
}

private String getChildNodeString(Node n){
    String nodeStringVal  = n+",";
    if(n.getLeft()!=null){
        nodeStringVal += ","+ getChildNodeString(n.getLeft());
    }

    if(n.getRight()!=null){
        nodeStringVal += ","+ getChildNodeString(n.getRight());
    }
}

我错过的任何其他事项>?

1 个答案:

答案 0 :(得分:0)

请参阅documentation

  

<强> mysqli_stmt :: get_result

     

返回成功SELECT查询的结果集,或其他DML查询或失败时返回FALSE。 mysqli_errno()函数可用于区分两种类型的故障。

因此$res->get_result()仅适用于您对select的期望。

要检查准备好的语句是否正确执行,您可以直接使用execute的返回参数:

  

<强> mysqli_stmt ::执行

     

成功时返回TRUE,失败时返回FALSE。

您应该使用两个不同的函数,一个用于select - 返回结果集的语句(顺便说一句,您必须fetch()),否则进一步查询将无法工作,读取documentation to execute())中的注释,以及返回truefalse的其他语句的注释。

你显然必须用if ($result2) {替换if ($result) {,但我认为这只是一个错字。