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

そして、次のことが起こっています: 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;



}

その後、動作します。理由はありますか?

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 に答える