2011-11-26 46 views
0

我嘗試使用此查詢:如何獲取php mysql查詢中的行數?

mysql_query("SELECT COUNT(*) FROM Users WHERE (Username=" + $username + "AND Hash=" + $hash + ")") 

返回的行數進行身份驗證的PHP腳本。但這不會返回一個int?我如何使用返回值來獲取行數?

回答

2

您可以使用mysql_fetch_array從結果中提取行:

$result = mysql_query("SELECT COUNT(*) FROM Users WHERE ...") or die(mysql_error()); 
$row = mysql_fetch_array($result); 
echo $row[0]; 

或者因爲你只需要取一個值,你可以做到這一點更簡單地使用mysql_result

$result = mysql_query("SELECT COUNT(*) FROM Users WHERE ...") or die(mysql_error()); 
echo mysql_result($result, 0); 

我d還建議您查看參數化查詢,而不是使用字符串連接來構建SQL查詢。

0
$row = mysql_fetch_row($your_resource); 
echo (int)($row[0]); 

此外,您可能會對SQL注入敞開大門。你應該學會用PDO做好準備的查詢。

2

您的直接問題是您正在使用+而不是.來連接字符串。

併爲usernamehash值將需要他們周圍的報價,使他們不中斷查詢:

mysql_query("SELECT COUNT(*) FROM Users WHERE (Username='" . $username . "' AND Hash='" + $hash . "')") 

一定要添加適當的錯誤如圖所示manual檢查您的通話mysql_query()

另外請確保您知道SQL injection。對所有值使用適當的衛生方法(如mysql_real_escape_string()用於傳統的mysql庫),或切換到PDO並準備好語句。這樣做的

0

一個方法是:

$result = mysql_query("SELECT username FROM Users WHERE (Username='" . $username . "' AND Hash='" . $hash . "') LIMIT 1"); 
$returned = mysql_numrows($result); 
echo $returned ." users"; 

但是,您可以進一步優化查詢取決於你對結果集做什麼。

看看http://php.net/manual/en/function.mysql-num-rows.php 還有http://www.php.net/manual/en/function.mysql-fetch-array.php等mysql_fetch_ *功能

此外,確保正確格式化您的查詢。查看mysql_real_escape_strings以逃避用戶輸入以避免SQL注入攻擊。

相關問題