0

我的网页上有这样的链接: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)) 
{
    ...
}
}
4

4 回答 4

5

简单的方法是将 id 转换为整数,如果 id 是一个整数:

$id = (int)$_GET['id'];

但强烈建议使用 pdo 或 mysqli 和准备好的语句:

http://php.net/manual/en/book.pdo.php

http://php.net/manual/en/book.mysqli.php

于 2013-07-09T16:34:59.520 回答
1

只要 mysql_fetch_row() 不返回任何内容(即因为没有 id 89),您就可以进行重定向

就像是:

if (!$row = mysql_fetch_row($result)) {
    header(Your error page);
}
于 2013-07-09T16:38:00.973 回答
0

您的代码假定查询成功而无需检查。mysql_query()出于调试目的,在语句的末尾添加一个 'or 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
于 2013-07-09T16:39:17.043 回答
0

警告:mysql_fetch_row() 期望参数 1 是资源

这意味着 $result = mysql_query(....); 在 mysql_fetch_row() 失败并导致 FALSE 而不是 Resource 之前调用您(即查询结果的句柄);

查看查询,如果可能,发布它,这就是您的问题所在。

于 2013-07-09T16:41:56.500 回答