【问题标题】:Allowed memory size of 134217728 bytes exhausted (tried to allocate 18063885380364533825 bytes)允许的内存大小为 134217728 字节已用尽(尝试分配 18063885380364533825 字节)
【发布时间】:2014-09-04 12:15:15
【问题描述】:

我正在使用odbc_connect() 在托管在 Ubuntu 14.04 上的脚本中连接 firebird 数据库

查询只能获取一行

$connect = odbc_connect("EXAMPLE", "GONE", "fishing");
$query = "SELECT REMITTONAME, REMITADDRESS, REMITCITY FROM PO WHERE NUM=10072";
$result = odbc_exec($connect, $query);

错误发生在我调用 odbc_exec($connect, $query) 的第 3 行

Allowed memory size of 134217728 bytes exhausted (tried to allocate 18063885380364533825 bytes)

我很惊讶为什么 odbc_exec 函数试图分配 15.66 exabyte?

我在 php.ini 中的内存限制设置为 128M,我尝试将其增加到 500M。

memory_limit = 500M

我也尝试在我的脚本开头放下面

ini_set('memory_limit', '-1');

在互联网上到处搜索,但没有解决我的问题,仍然试图找出原因。

任何帮助将不胜感激。

注意:

查询中选择的列都不是空的或空的

【问题讨论】:

标签: php odbc firebird ubuntu-14.04 memory-limit


【解决方案1】:

你尝试分配

1.80638854 × 10^13 megabytes 500MB 还不够 ;) 我认为您的 Query 或 odbc 模块中有错误。

在 64 位版本中,当返回字段之一为 NULL 时,odbc 会崩溃。因此,解决方法是在检索查询时替换所有空字段。

select ifnull(tluser,'') as USER from database.table

这应该可以帮助您解决问题。您可以在这里获得更多信息:

Linux odbc Fatal error: Allowed memory size

【讨论】:

  • ifnull 不是 firebird 数据库的功能,我已经确认我的所有列都已填满,它们都不是 null 或空
  • @TahirYasin Firebird 的 ifnull 等价于 COALESCE
  • @MarkRotteveel 但我可以看到非我查询的列为空或空
猜你喜欢
  • 2016-04-18
  • 2013-08-09
  • 2021-12-29
  • 2017-07-23
  • 2018-02-23
  • 2014-11-20
  • 2017-10-30
  • 1970-01-01
  • 2016-08-28
相关资源
最近更新 更多