PHP 使用 mysqli 的奇怪行为

标签 php mysql mysqli

我用 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;
    } 

并且发生以下事情:当调用 attemptsDBConnection 时 mysqli_connect 执行正常并且没有为 $con 设置 errno,此时 $con->affected_rows 为 0。$con->connect_errno 为零,因此从未输入 if,但条件设置后 $con->affected_rows 设置为 -1 不知道为什么!

然后返回 $con。

当 isAlreadyRegistered 函数执行时,execute 调用返回 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;



}

然后就可以了。知道为什么吗?

最佳答案

根据 mysqli_affected_rows 的文档-1表示上次查询有错误。

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

关于PHP 使用 mysqli 的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19384542/

相关文章:

php - 在 mySQL 中,我希望计算不同县的数量

php - 网站 - 连接到 MySQL 数据库

php - 使用 php 从数据库填充 HTML 下拉框,但我缺少一条记录

php mysql查询 - 查询中变量的输出值

php - 使用PHP和mysqli,是否可以在所有PHP脚本中的一个地方捕获所有mysqli错误?

php - 根据 ROW 插入数据

Php - 不返回 Json 编码

php - JavaScript 重定向

MySQL INT类型的5个字节?

mysql - 在mysql中创建一个存储过程,如果存在则删除该行,如果不存在则插入一个值