2011-03-25 129 views
1

所以我只是做一個簡單的電子郵件驗證測試/學習的目的,但我不明白什麼是錯的。這是問題:php mysqli if語句

該查詢工作..它更新我的表中的字段,但它應該只這樣做,如果它活動= 0。所以基本上,它仍然回聲的「成功」,即使active = 1,它不應該能夠查詢,因爲它只能抓住WHERE active = 0 ...這有意義嗎?這裏看看

<?php 
$connection = new mysqli('localhost', 'user', 'pass', 'db'); 
if (mysqli_connect_errno()) { 
    printf("Can't connect to MySQL Server. Errorcode: %s\n", 
     mysqli_connect_error()); 
    exit; 
} 

$email  = $_GET['email']; 
$activation = $_GET['hash']; 

$query = $connection->query("UPDATE users SET active = '1' WHERE 
    email='".$email."' AND activationCode='".$activation."' AND active='0'"); 

if ($query){ 
    echo "success"; 
} else { 
    echo "fail"; 
} 

$connection->close(); 
?> 
+0

即時通訊不知道什麼問題是... – Neal 2011-03-25 19:55:20

+0

這是一個有效的SQL語句,它將始終返回true – Neal 2011-03-25 19:56:34

+0

哦,我想我是在假設它只有在它發現結果時纔是真的。我會怎麼做? – Chris 2011-03-25 19:59:15

回答

3

該查詢返回true,因爲查詢執行得很好,即使它沒有影響任何行。如果查詢無效,它只會返回false。您應該考慮檢索受影響的行數。 (例如,mysql_num_rows($query))。

另外,在查詢中使用來自$ _GET或$ _POST的值以防止MySQL注入時,應該使用mysql_real_escape_string($getvalue)

+0

謝謝。有沒有相當於mysql_num_rows($查詢)的mysqli? – Chris 2011-03-25 20:01:24

+0

是的。在執行查詢後調用'$ connection-> affected_rows'來獲取行數。有關更多信息,請參閱http://php.net/manual/en/mysqli.affected-rows.php。 – tvkanters 2011-03-25 20:04:39

+0

謝謝隊友,我很感激。 – Chris 2011-03-25 20:06:35