2009-11-16 117 views
2

我決定從mysql更改爲mysqli部分方式通過一個項目 - 並運行到此hicup。PHP - 使用mysqli獲取單個結果

什麼是實現這一目標的最佳途徑: //檢查用戶名已被 $結果= mysql_result(的mysql_query( 「SELECT COUNT(*)FROM用戶其中username = '」。$用戶名 「'」) );

我找不到mysql_result的確切版本

我已經試過這樣:

$結果= mysqli_num_rows($ DB->查詢( 「SELECT * FROM用戶其中username ='」 $用戶名。 。「'」))

這有效,但我認爲在mySQL服務器上使用count會更容易。有沒有更好的辦法?

回答

2

如果您簡單地試圖確定用戶名是否已存在,我可能會建議您將您的查詢更改爲「SELECT 1 FROM user WHERE username ='」。 $用戶名。 「'」

$res = $db->query("SELECT 1 FROM user WHERE username='".$username."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 

這也是很好的做法逃避任何和所有的用戶輸入查詢的數據庫,你要離開自己敞開的SQL注入攻擊之前。這裏是安全的版本:

$res = $db->query("SELECT 1 FROM user WHERE username='". mysqli_real_escape_string($username) ."'"); 
if (mysqli_num_rows($res) > 0) { 
    die('username already taken'); 
} 
+0

我已經有一個'乾淨'的功能,我運行所有的輸入,雖然'$ input = mysqli_real_escape_string(htmlentities($ input,ENT_QUOTES))'謝謝你的額外想法:)無論如何,在地方'1' '*'是一個很好的補充,謝謝。 – Mark 2009-11-16 21:38:25

1

確保您有user表引用username列的索引和你所有的設置。你寫的代碼將起作用。

使用count()將不會產生任何影響,因爲username應該是唯一的。如果你確定索引也是UNIQUE類型的,你將會執行唯一的用戶名。