Исчерпание памяти php на call_user_func_array для запроса выбора mysqli - PullRequest
0 голосов
/ 26 мая 2018

Мой сценарий останавливается (просто пустой, без сообщения об ошибке, хотя это могут быть настройки моего хоста - A Orange) в этой строке кода:

call_user_func_array(array($stmt, 'bind_result'), refValues($parameters));

Вот значения, входящие в него:

First Array - that is, array($stmt, 'bind_result')
Array
(
    [0] => mysqli_stmt Object
        (
            [affected_rows] => -1
            [insert_id] => 0
            [num_rows] => 0
            [param_count] => 1
            [field_count] => 4
            [errno] => 0
            [error] => 
            [error_list] => Array
                (
                )

            [sqlstate] => 00000
            [id] => 1
        )

    [1] => bind_result
)

Parameter for Ref Values
Array
(
    [0] => 
    [1] => 
    [2] => 
    [3] => 
)

Странно то, что он отлично работает на моем локальном экземпляре MAMP (идентичная база данных, в основном та же версия PHP - MAMP - 5.6.32, A Small Orange - 5.6.35).MYSQL MAMP - 5.6.38, A Orange - 5.5.51-38.2.

Значения, входящие в функцию, также идентичны.Учетные данные MySQLi действительны, так как на остальной части страницы есть несколько запросов SELECT, которые прекрасно работают.

Это проблема с моим хостом или я что-то упускаю?Я признаю, что пока не владею MySQLi, вырос на MYSQL и не успел по-настоящему освоиться с этим изменением.


Редактировать: недавно показанный код ошибки выглядит следующим образом:

Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 4294967296 bytes) in [REDACTED] on line 171

Теперь возникает вопрос, почему относительно простой вызов MYSQL использует так много памяти - он просто выбирает одну маленькую строку из крошечной таблицы (256Kib!).

1 Ответ

0 голосов
/ 26 мая 2018

Ошибка возникла из-за использования mysqli с длинным текстовым столбцом в базе данных (в данном случае 'templates').Я просто изменил этот столбец на средний текст, и теперь все работает нормально.

Источник:

Допустимый объем памяти 134217728 байт исчерпан (попытался выделить 4294967296 байт)

...