正在使用“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
所有帮助将不胜感激,提前感谢
答案 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)
此外:
不要在函数中连接/选择数据库。这应该在每个页面的开头一次,不再需要(除非需要多个连接)。
请勿SELECT *
这样才能计算行数。请改用MySQL的 COUNT() 功能。
$result = mysql_query("SELECT COUNT(0) AS numRows FROM aTable");
$numRows = mysql_result($result, 0, 'numRows');
不要在没有采取适当措施保护自己免受SQL注入的情况下,将您的功能与用户输入一起使用。
答案 2 :(得分:1)
每次需要进行查询时都不应该连接数据库。只需保持持久连接或理想情况下使用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];
}