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;
}
そして、次のことが起こっています: AttemptDBConnection が呼び出されたとき、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;
}
その後、動作します。理由はありますか?