php - 使用 mysql_query 在 PHP 中出现 mysql_num_rows 错误

标签 php mysql mysql-num-rows

您好,我也是 php 和 mysql 的新手,由于用户进行的搜索,我想计算成员(member)数量。但是,mysql_num_rows 不起作用。

mysql_num_rows(mysql_query("SELECT * FROM members WHERE $title LIKE '%$_POST[search]%' LIMIT $start,$member_number"));

它说“mysql_num_rows():提供的参数不是...中的有效 MySQL 结果资源”

注意: $title 是一个选择菜单,用户可以选择要搜索的位置。如您所知,LIMIT 是页面中显示的成员数量。

还有 $start= ($page-1)*$member_number; 以设置该页面中的第一个条目。我认为问题就在这里,但我无法解决。 :(

最佳答案

您的查询可能有错误,在这种情况下 mysql_query 将返回 false

因此,您不应该像这样对命令进行分组。这样做:

$result = mysql_query("...");

if (!$result)
 { echo mysql_error(); die(); } // or some other error handling method
                                // like, a generic error message on a public site

$count = mysql_num_rows($result);

此外,您有多个 SQL injection vulnerabilities在你的代码中。您需要清理传入的 $search 变量:

$search = mysql_real_escape_string($_POST["search"]);

... mysql_query(".... WHERE $title LIKE '%$search%'");

如果 $start$end 来自外部,您还需要在将它们用于 LIMIT 子句之前对其进行清理。你不能在这里使用 mysql_real_escape_string(),因为它们是数值。使用 intval() 确保它们只包含数字。

从卫生的角度来看,使用动态列名也很困难:您也无法在此处应用 mysql_real_escape_string()。理想情况下,您应该与允许的列名列表进行比较以防止注入(inject)。

关于php - 使用 mysql_query 在 PHP 中出现 mysql_num_rows 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5529420/

相关文章:

php - 通过帖子传递数组的正确方法?

php - 在 mysql 数据类型上序列化数据

MySQL让玩家在日期之间排名

php - JQuery 验证远程和检查数据库 PHP MySQL 错误

php - mysqli num_rows 不返回正确的行数 - 检查所有值

php - 如何将查询的值分配给 zend 中的变量

php - mysql 和 php 不支持阿拉伯语

php - 统计与表中数据相同的单词数据

mysql - 来自城市表的地理位置距离 SQL

mysql - 我可以使用 LIKE 两次吗?