【发布时间】:2023-03-19 10:46:01
【问题描述】:
我的查询是三个表的几个左连接。返回的行数为 30k。这些行相当大。
查询执行良好(如在 mysql_query($sql) 中不会导致错误)。
如果我用 while($row = mysql_fetch_array($result)){} 循环这个查询,就没有问题。但是,在 while 循环之前,我会这样做:
$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;
}
}
而 php 在mysql_fetch_field 行抛出一个致命错误:
致命错误:允许的内存大小为 134217728 字节已用尽(试图分配 24 字节)
为什么会这样,为什么mysql_fetch_array while 循环也不会导致内存问题?以及如何使用mysql_fetch_field 获取字段名称类型。
【问题讨论】:
-
无论如何你都不应该使用
mysql_*函数。它们已被弃用很长时间。使用 mysqli 或 PDO。