[英]mysql_num_rows error in PHP with mysql_query
嗨,我也太新了,因为它是php和mysql,由于用户搜索,我想计算成员数。 但是, 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注入漏洞 。 您需要清理传入的$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()
。 理想情况下,应与允许的列名列表进行比较,以防止注入。
您必须在表单中使用GET方法,而不是POST。
mysql_num_rows在这里没有意义。
如果您使用限制,则您已经知道数字*
。
如果您想知道数字,则不应使用限制或请求行,而应选择数字本身。
// get your $title safe
$fields = array("name","lastname");
$key = array_search($_GET['title'],$fields));
$title = $fields[$key];
//escape your $search
$search = mysql_real_escape_string($_GET['search']);
$sql = "SELECT count(*) FROM members WHERE $title LIKE '%$search%'";
$res = mysql_query($query) or trigger_error(mysql_error()." in ".$sql);
$row = mysql_fetch_row($res);
$members_found = $row[0]
如果您只需要在页面上显示5条记录,则无需再次使用mysql_num_rows():
// Get LIMIT params
$member_number = 5;
$start = 0;
if (isset($_GET['page'])){
$start = abs($_GET['page']-1)*$member_number;
}
// get your $title safe
$fields = array("name","lastname");
$key = array_search($_GET['title'],$fields));
$title = $fields[$key];
//escape your $search
$search = mysql_real_escape_string($_GET['search']);
$sql = "SELECT count(*) FROM members
WHERE `$title` LIKE '%$search%'
LIMIT $start, $member_number";
$res = mysql_query($query) or trigger_error(mysql_error()." in ".$sql);
while($row = mysql_fetch_assoc($res){
$data[] = $row;
}
现在,您已经在$ data中选择了行以供进一步使用。
这种错误通常表示您的SQL查询中有错误-因此它没有成功,并且mysql_query()
不会返回有效资源; 因此,不能将其用作mysql_num_rows()
的参数。
您应该回显您的SQL查询,以检查其是否正常。
和/或,如果mysql_query()
返回false
,则可以使用mysql_error()
来获取错误消息:它将帮助您调试查询;-)
通常,您的代码看起来像这样:
$query = "select ..."; // note : don't forget about escaping your data
$result = mysql_query($query);
if (!$result) {
trigger_error(mysql_error()." in ".$query);
} else {
// use the resultset
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.