我正在尝试更新当前仍在使用mysql
功能的旧应用。不幸的是,对于mysqli
,应用程序在mysql
从未执行过的情况下内存不足(而且,老实说,它不应该)。使用mysql
,进程可能达到50 MB,这表明它在空闲集大小之上分配了8-15 MB。使用mysqli
时,它会耗尽限制(128)甚至达到256 MB而不会闪烁(只需加载索引页)。有些事情是对的。切换到mysqli
时,我收到此错误:
致命错误:允许的内存大小为134217728字节耗尽(尝试分配9072253字节)
"试图分配"字节数每次都在变化,它不是常数。该应用程序确实有一个抽象类,所以我开始通过强化它并用mysqli
实例替换调用(OOP,而不是程序)。重写所有查询将花费很长时间,并且目前在资源方面是不可行的。我安装了mysqlnd
。目前在PHP 5.6.30上。
代码在故障排除方面发生了很大变化,但这是query
方法的一个变体:
$result = $connection->query($sql);
$data = Array();
$i = 0;
while ($r = $result->fetch_assoc())
$data[$i++] = $r;
$ret = new stdClass();
$ret ->row = isset($data[0]) ? $data[0] : Array();
$ret ->rows = $data;
$ret ->num_rows = $i;
$result->free();
unset($data);
return $ret ;
我尝试过使用MYSQLI_USE_RESULT
和一些不同的方法来迭代/收集查询结果,例如fetch_all
,引用分配,没有while
循环,但没有一个帮助
我的下一步可能是尝试一个PDO实例......