使用WHERE计算mysql行的函数

时间:2012-02-24 19:17:25

标签: php mysql function

正在使用“WHERE”来计算行数,但是我得到了一个mysql错误

警告:mysql_num_rows():提供的参数不是第9行的C:\ AppServ \ www \ test \ test \ index.php中的有效MySQL结果资源 'where子句'中的未知列'1'

这是我的功能

    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

所有帮助将不胜感激,提前感谢

3 个答案:

答案 0 :(得分:1)

反引号(`)用于包含表名和列名。不要在其中包含$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 :(得分:1)

此外:

  1. 不要在函数中连接/选择数据库。这应该在每个页面的开头一次,不再需要(除非需要多个连接)。

  2. 请勿SELECT *这样才能计算行数。请改用MySQL的 COUNT() 功能。

    $result = mysql_query("SELECT COUNT(0) AS numRows FROM aTable");
    $numRows = mysql_result($result, 0, 'numRows');
    
  3. 不要在没有采取适当措施保护自己免受SQL注入的情况下,将您的功能与用户输入一起使用。

答案 2 :(得分:1)

  1. 每次需要进行查询时都不应该连接数据库。只需保持持久连接或理想情况下使用PDO。

  2. 值应该用简单的单引号括起来。这可能是导致错误的原因,因为反引号中的任何引号都被视为数据库/表/字段名称。

  3. 使用COUNT(*),它不会获取所有数据库行。

  4. 如果用户可能提供了值,如果不使用PDO,请使用mysql_real_escape_string转义它是否安全。

  5. 不使用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];
    }