2012-04-17 148 views
3

這是我的形式:mysqli_query()始終返回true

<!DOCTYPE html> 
<html> 
    <head> 
    </head> 
    <body> 
    <form action="register_ajax.php" method="get"> 
    <input type="text" name="email"> 
    <input type="submit" value="test"> 
    </form> 
    </body> 
</html> 

這是我的PHP代碼:

<?php 
    $dbc = mysqli_connect("localhost","root","*******","continental_tourism") OR die(mysqli_connect_error()); 
    $email = $_GET['email']; 
    $query = "SELECT email FROM customer_info WHERE email = '$email' "; 
    $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc)); 
    if($r) 
     echo "Email address exists!"; 
    else 
     echo "sss"; 
?> 

如果我輸入了正確的(現有的電子郵件上DB)$r是真實的。但是如果我輸入不存在的電子郵件,那麼$r也是如此。這是爲什麼?基本上我想檢測空集。我該怎麼做?

謝謝!

+0

首先,在$ _GET ['email']上使用mysqli_real_escape_string() – hjpotter92 2012-04-17 15:46:47

+0

你在做什麼是錯誤的,你檢查數據庫是否查詢在你的情況下哪個總是真實的......你需要什麼做的是檢查查詢返回的行數 – dansasu11 2012-04-17 15:48:25

回答

12

$r只有在出現SQL錯誤時纔會爲false。否則,即使您的SELECT語句沒有返回任何行,它也會始終返回資源ID。使用mysqli_num_rows()來計算返回的行數。零意味着沒有人使用該電子郵件地址。

if(mysqli_num_rows($r)) 
    echo "Email address exists!"; 
else 
    echo "sss"; 
+0

也許你打算說'msqli_num_rows'? :) – 2012-04-17 15:49:16

+0

哎呀!我當然做到了! – 2012-04-17 15:50:12

+0

非常感謝!我知道了:) – 2013-07-18 09:24:12

4

mysqli_query()如果查詢成功總是返回MySQLi的結果資源。作爲布爾值進行測試時,資源總是評估爲TRUE

成功的查詢不一定返回結果,它只是一個沒有失敗的查詢。查詢在出現錯誤時被認爲失敗,例如MySQL服務器中的語法錯誤或處理錯誤 - 這種情況下它們將返回FALSE。但是沒有找到結果的查詢仍然是一個成功的查詢。

您需要使用mysqli_num_rows()來確定查詢是否找到任何結果:

<?php 
    $dbc = mysqli_connect("localhost","root","longhorn","continental_tourism") OR die(mysqli_connect_error()); 

    $email = $_GET['email']; 

    $query = "SELECT email FROM customer_info WHERE email = '$email' "; 

    $r = mysqli_query($dbc, $query) OR die(mysqli_error($dbc)); 

    if(mysqli_num_rows($r) > 0) 
     echo "Email address exists!"; 
    else 
     echo "sss"; 
?> 
+0

非常感謝!我知道了 :) – 2012-04-17 16:00:48

0

mysqli_query將返回成功和false失敗結果對象。沒有選中的行不被視爲失敗。您可以使用mysqli_num_rows來檢查返回的行數。