我在 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;
}
然后它工作。知道为什么吗?