当前位置: 首页 > 面试题库 >

Linux odbc致命错误:允许的内存大小

颛孙飞鸾
2023-03-14
问题内容

我目前在设置AS400(iseries V6R1)和Debian之间的odbc链接时遇到一些问题,我使用iseriesAccess7.1
odbc驱动程序64位,unixODBC2.3.1和php5.4以及unixODBC支持。

我的链接似乎很好,因为我可以使用isql命令(它是unixODBC的一部分)连接到我的数据库,并执行一些SQL查询,但是使用php脚本无法读取数据库中的记录。当我尝试在Intranet上启动一个小脚本时,出现以下错误:

致命错误:在第122行的/home/www/imypdo/imypdo.php中,耗尽了134217728字节的允许的内存大小(试图分配493921239296字节)

超过450 Gb!在/ var / log / messages和/ etc / httpd / logs / error_log中没有任何内容

一个简单的sql查询(select中只有1行)将返回一些奇怪的字符(请参见下文),并且一旦我选择了1或2行,就会发生内存大小错误。

[0] =>数组([ADHMAR] => AAAAAAA a @YÿŒ4-X0!ÿŒ4làÿŒ4làÿŒ4!)

我几乎可以肯定这是一个与64位驱动程序相关的问题,因为我已经有另一个Debian与该iseries关联,但是与32位驱动程序相关联,并且可以完美运行。奇怪的是,isql命令正在运行,而日志文件中什么也没有。

如果确实是64位驱动程序问题,我如何向IBM证明呢?

任何帮助将不胜感激

谢谢

---------------------------要连接的类-------------------- --------

private $_bdd = "DSN=db2;",
        $_user = "USERNAME",
        $_pwd = "Password";

private $_con,
        $_isConnected;


public function open_connection(){
    $this->_con = odbc_connect ($this->_bdd, $this->_user, $this->_pwd ) or die("Error Connection") ;
    $this->_isConnected = true;
}

public function close_connection(){
     odbc_close($this->_con);
     $this->_isConnected = false;
}

public function execute($sql){

    if(!($this->_isConnected))
        $this->open_connection();

    #execute sql
    $res = odbc_exec($this->_con, $sql);

    return $res;
}

public function fetchRow($res){

    $row = odbc_fetch_array($res);
    return $row;
}

}

---------------------------------查询脚本--------------- ---------------

public function getPhoneLogsByDate($startDate, $endDate) {

    $startDate  = date('Ymd', strtotime($startDate));
    $endDate    = date('Ymd', strtotime($endDate));

    $rr = new As400_Model_as400query();

    $rr->open_connection();

    $sql = "select trim(tluser) as USER, trim(tlacct) as CLIENT, trim(concat(concat(concat(concat(concat(concat(substr(trim(tldate),1,4),'-'),substr(trim(tldate),5,2)),'-'),substr(trim(tldate),7,2)),' '), concat(concat(concat(concat(substr( substr(trim(tltime+1000000),2,6),1,2),':'),substr(substr(trim(tltime+1000000),2,6),3,2)),':'), substr(substr(trim(tltime+1000000),2,6),5,2)))) as DATETIME 
            ,trim(concat(concat(concat(concat(concat(concat(concat(concat(concat(concat(trreas,'|'),trsr01),'|'),trsr02),'|'),trsr03),'|'),trsr04),'|'),trsr05)) as REASONS
            ,trim(concat(concat(concat(tnnot1,tnnot2),tnnot3),tnnot4)) as NOTES

            from cabledta.tlogmstr left join cabledta.tlogreas on trnum#=tlnum#  left join cabledta.tlognote on tnnum#=tlnum#
            where tldate>='".$startDate."' and tldate <='".$endDate."'";



    $res = $rr->execute($sql);

    $response = array();


    while ($row = $rr->fetchRow($res)){

        $response[] = array(

                                'userName'      => $row['USER'],
                                'clientNumber'  => $row['CLIENT'],
                                'logDateTime'   => $row['DATETIME'],
                                'logReasons'    => $row['REASONS'],
                                'logNotes'      => utf8_encode($row['NOTES'])

                            );

    }
    $rr->close_connection();

return $response;
}

问题答案:

我知道了。

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

例如:

从database.table中选择ifnull(tluser,’‘)作为USER



 类似资料:
  • 我在尝试使用Symfony 5时遇到以下错误 我知道如何修补(memory_limit=-1),但我想知道为什么我有这个错误。 错误: PHP致命错误:允许内存大小为134217728字节耗尽(试图分配32230840字节) /Applications/MAMP/htdocs/Toile./vendor/twig/twig/src/Lexer.php在第157行 15:50:13关键[php]致命

  • 我正在尝试使用此命令在我的博客中安装laravel passport 作曲家需要laravel/护照 但是在安装的时候,我面临着这样的致命错误 **致命错误:允许内存大小1610612736字节耗尽(试图分配4096字节)在phar://C:/用户/Hamid/AppData/本地/ComposerSetup/bin/composer.phar/src/Composer/DependencyRes

  • 问题内容: 我没有处理大文件的经验,所以我不确定该怎么办。我试图使用 file_get_contents 读取几个大文件;任务是使用 preg_replace() 清洁和修补它们。 我的代码在小文件上运行良好;但是,大文件(40 MB)触发内存耗尽错误: 我当时在考虑使用 fread(), 但是我不确定那也行。有解决此问题的方法吗? 感谢您的输入。 这是我的代码: 问题答案: 首先,您应该了解,在

  • 我知道这个问题已经贴在这里了,但我似乎无法修复它。 问题是Drupal需要的内存比php允许的要多。 运行phpinfo()我发现配置文件路径是: /Applications/MAMP/bin/php/php5.4.10/conf/php.ini,我调整了该文件。(memory_limit=1028) 我还调整了:主php。ini(MAMP/conf/php5.4.10)drupal设置。php(

  • 以下是完整的错误: 致命错误:允许内存大小为134217728字节耗尽(尝试分配131072字节) /sites/apps/seller/www/application/libraries/Excel/PHPExcel/CachedObjectStorage/CacheBase.php行173 这是mu代码: 我使用codeigniter框架和phpexcel库。非常感谢。

  • 我已经安装Laravel使用Hostinger自动安装程序。现在,我试图安装的Auth UI使用这个命令:。 我还尝试从命令末尾删除该版本。它显示: 致命错误:允许的内存大小。 请告诉我如何解决这个问题。