1

这个功能应该:

function get_article_info(){
        $id = $_GET['id'];
        $data = array();
        $q = "SELECT * FROM articles WHERE article_id = $id";
        $qry = mysql_query($q);
        while($row = mysql_fetch_assoc($qry)){
            $data[] = $row;
        }
        return $data;
    }

和这个一样:

function get_article_info2(){
        $id = $_GET['id'];
        $data = array();
        $q = mysql_fetch_assoc(mysql_query("SELECT * FROM articles WHERE article_id = $id"));

        while($row = $q){
            $data[] = $row;
        }
        return $data;
    }

如果我尝试使用 get_article_info2 我会收到此错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 35 bytes)

谁能告诉我为什么它不起作用?谢谢 ;)

4

2 回答 2

2
    $q = mysql_fetch_assoc(mysql_query("SELECT * FROM articles WHERE article_id = $id"));

    while($row = $q){
        $data[] = $row;
    }

这个循环没有尽头,因为你之前给 $q 赋值过一次,它永远不会改变。因此,同一行一遍又一遍地附加到 $data,最后你的脚本内存不足。

您必须分别为每条记录调用 fetch 函数(如在第一个代码中)。

于 2013-04-09T13:22:53.780 回答
2

首先,您应该始终转义或清理您的 SQL 参数:

$sql = sprintf('SELECT * FROM articles WHERE article_id = %d', (int)$_GET['id']);
$res = mysql_query($sql);

其次,你应该在循环mysql_fetch_assoc() 内执行;否则会导致死循环:

while (($row = mysql_fetch_assoc($req)) !== false) {
    $data[] = $row;
}

也就是说,您应该停止使用旧mysql_*功能;改用 PDO 或 mysqli 并利用准备好的语句的力量。

于 2013-04-09T13:27:33.510 回答