mysql_unbuffred_query无效

时间:2013-02-01 13:58:50

标签: php mysql json memory

我有一个php文件,它将从mysql_query()检索到的结果编码为json格式。我收到的数据很大,即接近200,000个元组,每个元组有近10个变量。早些时候,我得到了一个例外,“允许的内存大小为67108864字节耗尽”。然后我在互联网上搜索,有人引用了mysql_unbuffered_query是解决方案。我也试过了,但我又得到了同样的错误。我们如何在php中处理如此大的数据?

  

增加内存也不是一个选项,因为我有一个共享   托管帐户。

这是我用于检索结果和编码为json的代码。

$result=mysql_unbuffered_query("Some query which gives large data");
$res=array();
if($result)
{
    while($r = mysql_fetch_assoc($result)) 
    {
        $rows[] = $r;
    }
    print json_encode($rows);

}
else
{
    echo mysql_error();
}

这些问题的解决办法是什么?

1 个答案:

答案 0 :(得分:2)

这样的事情就像我想象的那样,只需添加你的疑问等等。

// Must be zero to get 1st record
$limit = 0;
// Determine how many you want to pull at a time
$offset = 10;
// Run count query to get this value
$total = 10000; // <- number of records needing to be pulled
for ($limit; $limit <= $total; $limit + $offset) {
    // Run query here and pump results into an array
    echo "Total: ".$total."<br>";
    echo "offset: ".$offset."<br>";
    echo "limit: ".$limit."<br>";
}

警告:确保您的总计数可以被偏移量整除,否则您将丢失记录,例如:

$offset = 19;
$total = 10000;

将最后一次通话输出为:

  

总计:10000
  抵消:19
  限制:9994


修改

尝试使用以下模板,看看是否有帮助,当我运行我在json_encode循环中使用$limit + $offsetfor的原始答案时,我得到了相同的内存错误,但是这个下一点对我有用。

$offset = 10;
$total = 1000000;
$array = array();
for ($limit = 0; $limit <= $total; $limit++) {
    // Your code here
    $array[$limit] = $offset;
    // Keep the following line
    $limit = ($limit - 1) + $offset;
}
print json_encode($array);