dtgr6303 2019-04-16 14:28
浏览 104

当所选行具有NULL值时,允许的内存大小耗尽

I'm trying to connect my Laravel 5.7 project to our iSeries database. My running environment is in Docker running in a Linux environment. Whenever I try to do a SELECT on a table row that contains a NULL value, I get the following error:

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

Replacing NULL values in the table with '' or anything else, works as expected, with all values returned correctly. The table in question only has 10 rows of data.

My Controller query code:

use App\Notification;
$notifications = Notification::where('user_id', '=', $currentUser)->orderBy('id', 'desc')->get();

My table up() Migration:

Schema::create('notifications', function (Blueprint $table) {
    $table->increments('id');
    $table->string('user_id');
    $table->string('type');
    $table->integer('severity');
    $table->text('message');
    $table->string('link')->nullable();
    $table->timestamp('read_at')->nullable();
    $table->timestamps();
    $table->softDeletes();
});

My database.php connections array:

'connections' => [
    'db2' => [
        'driver' => 'db2_ibmi_odbc',
        // or 'db2_ibmi_ibm' / 'db2_zos_odbc' / 'db2_expressc_odbc
        'driverName' => '{iSeries}',
        // or '{iSeries Access ODBC Driver}' / '{IBM i Access ODBC Driver 64-bit}' / '{IBM DB2 ODBC DRIVER}
        'host' => 'redacted',
        'username' => 'ROBERT',
        'password' => 'password',
        'database' => 'ROBERT',
        'prefix' => '',
        'schema' => 'ROBERT',
        'port' => 446,
        'date_format' => 'Y-m-d H:i:s.u',
        // or 'Y-m-d H:i:s.u' / 'Y-m-d-H.i.s.u'...
        'odbc_keywords' => [
            'SIGNON' => 3,
            'SSL' => 0,
            'CommitMode' => 2,
            'ConnectionType' => 0,
            'DefaultLibraries' => '',
            'Naming' => 0,
            'UNICODESQL' => 0,
            'DateFormat' => 5,
            'DateSeperator' => 0,
            'Decimal' => 0,
            'TimeFormat' => 0,
            'TimeSeparator' => 0,
            'TimestampFormat' => 0,
            'ConvertDateTimeToChar' => 0,
            'BLOCKFETCH' => 1,
            'BlockSizeKB' => 32,
            'AllowDataCompression' => 1,
            'CONCURRENCY' => 0,
            'LAZYCLOSE' => 0,
            'MaxFieldLength' => 15360,
            'PREFETCH' => 0,
            'QUERYTIMEOUT' => 1,
            'DefaultPkgLibrary' => 'QGPL',
            'DefaultPackage' => 'A /DEFAULT(IBM),2,0,1,0',
            'ExtendedDynamic' => 0,
            'QAQQINILibrary' => '',
            'SQDIAGCODE' => '',
            'LANGUAGEID' => 'ENU',
            'SORTTABLE' => '',
            'SortSequence' => 0,
            'SORTWEIGHT' => 0,
            'AllowUnsupportedChar' => 0,
            'CCSID' => 819,
            'GRAPHIC' => 0,
            'ForceTranslation' => 0,
            'ALLOWPROCCALLS' => 0,
            'DB2SQLSTATES' => 0,
            'DEBUG' => 0,
            'TRUEAUTOCOMMIT' => 0,
            'CATALOGOPTIONS' => 3,
            'LibraryView' => 0,
            'ODBCRemarks' => 0,
            'SEARCHPATTERN' => 1,
            'TranslationDLL' => '',
            'TranslationOption' => 0,
            'MAXTRACESIZE' => 0,
            'MultipleTraceFiles' => 1,
            'TRACE' => 0,
            'TRACEFILENAME' => '',
            'ExtendedColInfo' => 0,
        ],
        'options' => [
            PDO::ATTR_CASE => PDO::CASE_LOWER,
            PDO::ATTR_PERSISTENT => false,
            //PDO::I5_ATTR_DBC_SYS_NAMING => false,
            //PDO::I5_ATTR_COMMIT => PDO::I5_TXN_NO_COMMIT,
            //PDO::I5_ATTR_JOB_SORT => false,
            //PDO::I5_ATTR_DBC_LIBL => '',
            //PDO::I5_ATTR_DBC_CURLIB => '', 
        ]
    ],
........more, unused connections

I am using the cooperl22/laravel-db2 service provider.

My DockerFile:

FROM php:7.2-fpm-stretch

ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /tmp

ADD php/www.conf /usr/local/etc/php-fpm.d/www.conf
ADD php/zz-docker.conf /usr/local/etc/php-fpm.d/zz-docker.conf
ADD os/freetds.conf /etc/freetds/freetds.conf
ADD os/ldap.conf /etc/ldap.conf 
ADD os/main.cf /etc/postfix/main.cf
ADD iseriesaccess_7.1.0-1.0_amd64.deb /

RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y postfix git libssh2-1 libssh2-1-dev telnet autoconf unixodbc-dev \
unixodbc odbcinst freetds-bin freetds-dev tdsodbc ghostscript net-tools libldap2-dev zip unzip && \
pecl install ssh2-1.1.2

RUN ln -s /usr/local/bin/php /usr/bin/php
RUN ln -s /usr/lib/x86_64-linux-gnu /usr/lib64
RUN dpkg -i /iseriesaccess_7.1.0-1.0_amd64.deb

RUN docker-php-ext-configure ldap --with-libdir=lib/x86_64-linux-gnu/ && \
docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr/ && \
docker-php-ext-install pdo_odbc pdo_mysql ldap

ADD os/odbc.ini /etc/odbc.ini
ADD os/odbcinst.ini /etc/odbcinst.ini

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

CMD ["php-fpm"]

EXPOSE 5000

As you can see, I'm using the iseriesaccess_7.1.0-1.0_amd64.deb driver.

Looking at other answers, upping the php memory limit is NOT an option.

Thanks for any help.

  • 写回答

1条回答 默认 最新

  • dongzhang7961 2019-04-16 15:43
    关注

    Try increasing the value of memory_limit on your php.ini file located on /etc/php/7.2/cli/php.ini assumming you are working with PHP7.2, the path will include your php version.You can increase it until your memory requirement is fullfilled (-1 for infinite). But remember, this is not a good practice.

    评论

报告相同问题?

悬赏问题

  • ¥15 用PLC设计纸袋糊底机送料系统
  • ¥15 simulink仿真中dtc控制永磁同步电机如何控制开关频率
  • ¥15 用C语言输入方程怎么
  • ¥15 网站显示不安全连接问题
  • ¥15 github训练的模型参数无法下载
  • ¥15 51单片机显示器问题
  • ¥20 关于#qt#的问题:Qt代码的移植问题
  • ¥50 求图像处理的matlab方案
  • ¥50 winform中使用edge的Kiosk模式
  • ¥15 关于#python#的问题:功能监听网页