簡體   English   中英

PHP使用mysqli的奇怪行為

[英]PHP strange behaviour using 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;
    } 

並且發生了以下事情:當調用tryDBConnection時,mysqli_connect執行ok並且沒有為$ con設置errno,此時$ con-> affected_rows為0。$ con-> connect_errno為零,因此從不輸入if,但是在條件設置為$ con-> affected_rows設置為-1 dunno為什么!

然后返回$ 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但是您使用的查詢很可能是錯誤的。

試試這個快速代碼(未經測試,我希望它能工作..):)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM