我从AS400(IBM iSeries数据库)表中选择了19列。查询运行正常,总行数小于17,000。 但是,一旦我运行
$row = $statement->fetch(PDO::FETCH_NUM)
PHP耗尽内存(512兆)。该脚本甚至不会花费一秒钟来崩溃 - 有些东西会立即耗尽所有内存。
我可以从另一个表中获取更多列,返回总共150,000行(使用相同的fetch()命令)并且内存消耗保持稳定在500 KB左右。 然而,关于其他选择提取的一些东西完全消灭了这个过程。
我在64位Linux上使用IBM的iSeries ODBC驱动程序。 任何有关进一步故障排除的建议都将不胜感激。
更新:我已将问题隔离到列中,导致此问题 - 它是一个长度为4的CHARACTER字段。打破提取的记录实际上在该字段中为空。可能是驱动程序对如何处理空值的一些误解。
答案 0 :(得分:1)
这显然是IBM 64位驱动程序的一个已知问题: https://bugs.php.net/bug.php?id=54007
代替移植错误报告中建议的修复并重新编译PHP,可以使用解决方法,例如向可以为空的字段添加IFNULL函数调用。不完全是一个解决方案,但它必须要做,直到IBM解决这个问题(如果他们这样做)。
更新:如果有人遇到此问题,显然当iSeries odbc驱动程序确实存在此问题(并且可能永远不会更新)时,会有一个名为IBM i Access Client的新连接软件它带有更好的ODBC驱动程序。
有关下载位置的说明,请访问:http://www-01.ibm.com/support/docview.wss?uid=nas8N1010355
答案 1 :(得分:0)
也许你可以这样做:
docker-machine start default