Разрешенный объем памяти исчерпан, когда выбранная строка имеет значение NULL - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь подключить свой проект Laravel 5.7 к нашей базе данных iSeries.Моя рабочая среда находится в Docker, работающем в среде Linux.Всякий раз, когда я пытаюсь выполнить SELECT для строки таблицы, содержащей значение NULL, я получаю следующую ошибку:

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

Замена значений NULL в таблице на '' или что-то еще, работает как положено, свсе значения возвращены правильно.В рассматриваемой таблице всего 10 строк данных.

Код запроса My Controller:

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

Моя таблица up () Миграция:

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();
});

Моя база данных.массив соединений php:

'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

Я использую сервис-провайдер cooperl22 / laravel-db2.

Мой 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

Как видите, я 'm с помощью драйвера iseriesaccess_7.1.0-1.0_amd64.deb.

Глядя на другие ответы, увеличение предела памяти php НЕ является вариантом.

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 16 апреля 2019

Попробуйте увеличить значение memory_limit в файле php.ini, расположенном в /etc/php/7.2/cli/php.ini, если вы работаете с PHP7.2, путь будет включать вашу версию php. Вы можете увеличивать ее до тех пор, пока требования к памяти не будут заполнены (-1 за бесконечность).Но помните, что это не очень хорошая практика.

...