我的网页上有这样的链接:http://test.com/index.php?function=news&id=88
所以无论什么时候我把'88之后,我都会收到以下错误:警告:mysql_fetch_row()期望参数1是资源,布尔值在......第588行中给出
所以我读到了关于mysql_real_escape_string()的内容,但是我没有发布ID而且我不知道如何防止出现此错误。
function news()
{
$query = mysql_query("SELECT * FROM news WHERE id=".$_GET['id']."");
while($news = mysql_fetch_row($query))
{
...
}
}
答案 0 :(得分:5)
如果id是一个整数:
,那么简单的方法是将id转换为整数$id = (int)$_GET['id'];
但强烈建议在准备好的陈述中使用pdo或mysqli:
答案 1 :(得分:1)
只要mysql_fetch_row()没有返回任何内容(即因为没有id 89),你就可以进行重定向。
类似的东西:
if (!$row = mysql_fetch_row($result)) {
header(Your error page);
}
答案 2 :(得分:0)
您的代码假设查询成功而未进行检查。出于调试目的,在mysql_query()
语句的末尾添加一个'或die(mysql_error())'行。
$query = mysql_query("SELECT * FROM news WHERE id=".$_GET['id']."") or die( mysql_query() );
要在生产应用程序中进行更强大的错误处理,请检查$query
的值,如果错误则记录错误。
if (false === $query ) {
// Log error and/or notify an administrator
}
else {
while($news = mysql_fetch_row($query)) ...
正如其他答案中所指出的,您应该确保id
参数的值是一个整数,因为您的查询假设它是。您可以通过强制转换来执行此操作:
(int)$_GET['id']
或通过更强大的类型检查
if ( !is_numeric( $_GET['id'] ) ) {
// Take appropriate action
}
else {
// Create and execute the query
答案 3 :(得分:0)
警告:mysql_fetch_row()期望参数1为资源
这意味着$ result = mysql_query(....);在mysql_fetch_row()失败之前调用你,并导致FALSE而不是资源(即查询结果的句柄);
查看查询,如果可能,请将其发布,这就是问题所在。