0

我在 PHP 中实现了以下代码:

function attemptDBConnection($shouldRedirect){

    $con=mysqli_connect("localhost","root","root","mydb");


    if ($con->connect_errno && shouldRedirect)
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        header("Location: ./errorPages/nodbconnection.html");
    }


    return $con;
}


function isAlreadyRegistered($con){



    $email=$_POST["email"];





    $testSelectUser=$con->stmt_init();
    $testSelectUser->prepare("SELECT * from User WHERE email=?;");
    $testSelectUser->bind_param("s",$email);
    $testSelectUser->execute();
    $resultUser=$testSelectUser->get_result();
    $rowsUser=mysqli_num_rows($resultUser);

    return $rowsUser>0;



}

    $con=attemptDBConnection(true);

    if(isAlreadyRegistered($con)){
    header("Location: ./errorPages/alreadyregistered.html");
    mysqli_close($con);
    exit;
    } 

并且发生了以下事情:当调用尝试数据库连接时,mysqli_connect 执行正常并且没有为 $con 设置 errno,此时 $con->affected_rows 为 0。$con->connect_errno 为零,因此永远不会输入 if,但在条件设置 $con->affected_rows 设置为 -1 不知道为什么!

然后返回 $con。

当 isAlreadyRegistered 函数执行时,执行调用返回 true 但 $testUserSelect->affected_rows 设置为 -1 但 errno 为 0 。下一次调用 get_result() 永远不会返回。

什么可能导致这种情况发生?我究竟做错了什么?

PHP 对我来说很新,我一直无法弄清楚这里发生了什么。谢谢你。

编辑:

我做了一些测试:如果我为此替换 isAlreadyRegistered() 函数:

function isAlreadyRegistered($con){



$email=$_POST["email"];





$testSelectUser=$con->stmt_init();
$testSelectUser->prepare("SELECT * from User WHERE email='myemail@gmail.com';");
$testSelectUser->execute();
$resultUser=$testSelectUser->get_result();
$rowsUser=mysqli_num_rows($resultUser);

return $rowsUser>0;



}

然后我得到相同的结果。

相反,如果我这样做:

    function isAlreadyRegistered($con){



    $email=$_POST["email"];

    $testSelectDoc="SELECT * from ask2doc.Medico WHERE email='myemail@gmail.com';";

    $resultDoc=mysqli_query($con,$testSelectDoc);

    $rowsDoc=mysqli_num_rows ($resultDoc );


    return $rowsDoc>0;



}

然后它工作。知道为什么吗?

4

2 回答 2

0

根据mysqli_affected_rows的文档, -1 表示最后一个查询中的错误。

检查$testSelectUser->error,但您使用的查询很可能是错误的。

于 2013-10-15T15:08:38.843 回答
0

试试这个快速代码(未经测试,我希望它有效..):)

function isAlreadyRegistered($con){
    $email= !empty($_POST["email"]) ? $_POST["email"] : '';

    $testSelectUser=$con->stmt_init();
    $testSelectUser->prepare("SELECT * from User WHERE email=?;");
    $testSelectUser->bind_param("s",$email);
    $testSelectUser->execute();
    $testSelectUser->store_result();
    return $testSelectUser->num_rows > 0;
}
于 2013-10-15T15:12:20.113 回答