У меня есть следующий массив для добавления в базу данных.
$arr = array("a'a","b'b","c'c");
Чтобы избежать одиночных кавычек перед добавлением в базу данных, я использую это для цикла
for ($i=0; $i < count($arr); $i++) {
$arr[$i] = addslashes($arr[$i]);
}
И это работает просто отлично. Но если исходный массив изменяется на это:
$arr = array("first"=>"a'a","b'b","c'c");
тогда я получаю следующую ошибку:
Неустранимая ошибка: допустимый объем памяти 134217728 байт исчерпан (попытка выделить 150994944 байт) в /home/filepath/file.php в строке 12
Я не уверен, почему я получаю эту ошибку, когда массив имеет пользовательский ключ «first». Я не получил бы эту ошибку, если бы я вручную использовал addlashes для каждого значения массива, но всякий раз, когда я помещал его в цикл for, я получал ошибку.
У кого-нибудь есть обходной путь для применения addlashes к каждому значению массива? Я пробовал mysqli_real_escape_string вместо addlashes, но я получил ту же ошибку.
Как упоминалось в комментариях, вы должны использовать подготовленный оператор со связанными переменными вместо того, чтобы вручную экранировать свои значения (с неправильной функцией …).
Причина вашей ошибки в том, что вы создали бесконечный цикл.
Сначала ваш массив имеет 3 элемента, но, как вы используете числовой for
цикл вместо foreach
, на первых двух итерациях вы избежите последних двух значений, индексов 0
а также 1
, На третьей итерации вы пытаетесь экранировать элемент в вашем массиве с ключом 2
как $i
является 2
,
Но в вашем массиве нет элемента, который имеет ключ 2
, Итак, вы добавляете четвертый элемент. И это происходит на каждой итерации после этого; Вы добавляете новые элементы и $i
никогда не достигнет счетчика вашего массива, заставляя вас зацикливаться, пока не закончится память.
Других решений пока нет …