簡體   English   中英

使用 WHERE 計算 MySQL 行數的函數

[英]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'];

此外:

  1. 不要在函數中連接/選擇數據庫。 這應該是做一個時間在每一頁的開始,沒有更多的(除非多個連接,需要的話)。

  2. 不要SELECT *只是為了計算行數。 改用 MySQL 的COUNT()函數。

     $result = mysql_query("SELECT COUNT(0) AS numRows FROM aTable"); $numRows = mysql_result($result, 0, 'numRows');
  3. 不要在沒有采取適當措施以防止 SQL 注入的情況下將您的函數用於用戶輸入。

  1. 您不應在每次需要執行查詢時連接到數據庫。只需保持持久連接或理想情況下使用 PDO。

  2. 值應該用簡單的單引號括起來。 這可能是導致您出錯的原因,因為用反引號括起來的任何內容都被視為數據庫/表/字段名稱。

  3. 使用 COUNT(*),它不會獲取所有數據庫行。

  4. 如果值可能由用戶提供,如果不使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM