为什么mysql_fetch_field会耗尽此查询中的内存?

时间:2015-07-05 17:29:50

标签: php mysql

我的查询是三个表上的几个左连接。返回的行数为30k。行很大。

查询执行正常(如在mysql_query($ sql)中不会导致错误)。

如果我使用while($ row = mysql_fetch_array($ result)){}循环遍历此查询,则没有问题。但是,在while循环之前我这样做:

0xFFFFFFFF

并且php在$types = array(); while($field = mysql_fetch_field($result)){ switch($field->type) { case "int": $types[$field->name] = 'int'; break; case "real": $types[$field->name] = 'float'; break; default: $types[$field->name] = 'string'; break; } } 行引发致命错误

  

致命错误:允许的内存大小为134217728个字节(尝试分配24个字节)

为什么会这样,为什么mysql_fetch_field while循环也不会导致内存问题?如何使用mysql_fetch_array获取字段名称类型。

1 个答案:

答案 0 :(得分:0)

尝试使用带偏移的mysql_fetch_field

$types = array();
$index=0;
$num_fields=mysql_num_fields($resource);

while($index<$num_fields) {
 $field=mysql_fetch_field($resource, $index);



    switch($field->type) {
         case "int":
                $types[$field->name] = 'int';
                break;
         case "real":
            $types[$field->name] = 'float';
            break;
        default:
            $types[$field->name] = 'string';
            break;
    }
 $index++; 
}