[英]Function to count MySQL rows using WHERE
正在使用“WHERE”創建計算行數的函數,但出現 mysql 錯誤
警告:mysql_num_rows():在 C:\\AppServ\\www\\test\\test\\index.php 第 9 行“where 子句”中的未知列“1”中,提供的參數不是有效的 MySQL 結果資源
這是我的功能
function CountRows($table, $field = NULL, $value = NULL){
mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
mysql_select_db(DB_NAME);
if($field != NULL && $value != NULL){
return mysql_num_rows(mysql_query("SELECT * FROM `".$table."` WHERE `".$field."` = `".$value."`"))or die(mysql_error());
}else{
return mysql_num_rows(mysql_query("SELECT * FROM `".$table."`"));
}
}
我創建了這個函數來簡化被禁止成員、非活動成員等的 mysql 行計數,因為所有成員都將使用 WHERE
所有幫助將不勝感激,提前致謝
反引號 (`) 用於封閉表名和列名。 不要將$value
包裹在其中,只需使用單引號 (')。
此外,您沒有理由需要從數據庫中提取完整數據集並計算其中的行數。 只需查詢計數:
if($field != NULL && $value != NULL){
$cnt = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) as cnt FROM `".$table."` WHERE `".$field."` = '".$value."'"))or die(mysql_error());
}else{
$cnt = mysql_fetch_assoc(mysql_query("SELECT COUNT(*) as cnt FROM `".$table."`"));
}
return $cnt['cnt'];
此外:
不要在函數中連接/選擇數據庫。 這應該是做一個時間在每一頁的開始,沒有更多的(除非多個連接,需要的話)。
不要SELECT *
只是為了計算行數。 改用 MySQL 的COUNT()函數。
$result = mysql_query("SELECT COUNT(0) AS numRows FROM aTable"); $numRows = mysql_result($result, 0, 'numRows');
不要在沒有采取適當措施以防止 SQL 注入的情況下將您的函數用於用戶輸入。
您不應在每次需要執行查詢時連接到數據庫。只需保持持久連接或理想情況下使用 PDO。
值應該用簡單的單引號括起來。 這可能是導致您出錯的原因,因為用反引號括起來的任何內容都被視為數據庫/表/字段名稱。
使用 COUNT(*),它不會獲取所有數據庫行。
如果值可能由用戶提供,如果不使用 PDO,則通過使用 mysql_real_escape_string 對其進行轉義以確保它是安全的。
不使用 PDO 代碼將是:
mysql_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD);
mysql_select_db(DB_NAME);
function CountRows($table, $field = NULL, $value = NULL){
if ($field != NULL && $value != NULL) {
$query = "SELECT COUNT(*)
FROM `".$table."`
WHERE `".$field."` = '". mysql_real_escape_string($value) . "'";
} else {
$query = "SELECT COUNT(*) FROM `".$table."`";
}
$count = mysql_fetch_array(mysql_query($query));
return $count[0];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.