这应该是这个功能:
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)
能告诉我为什么它不起作用吗? 谢谢;)
答案 0 :(得分:2)
$q = mysql_fetch_assoc(mysql_query("SELECT * FROM articles WHERE article_id = $id"));
while($row = $q){
$data[] = $row;
}
此循环没有结束,因为您之前曾为$ q分配一个值,并且它永远不会更改。因此,同一行会一遍又一遍地附加到$ data,最后你的脚本内存不足。
您必须分别为每条记录调用fetch函数(如第一段代码所示)。
答案 1 :(得分: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代替并利用预处理语句的强大功能。