Подготовка массива строк для добавления в базу данных

У меня есть следующий массив для добавления в базу данных.

$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, но я получил ту же ошибку.

1

Решение

Как упоминалось в комментариях, вы должны использовать подготовленный оператор со связанными переменными вместо того, чтобы вручную экранировать свои значения (с неправильной функцией …).

Причина вашей ошибки в том, что вы создали бесконечный цикл.

Сначала ваш массив имеет 3 элемента, но, как вы используете числовой for цикл вместо foreach, на первых двух итерациях вы избежите последних двух значений, индексов 0 а также 1, На третьей итерации вы пытаетесь экранировать элемент в вашем массиве с ключом 2 как $i является 2,

Но в вашем массиве нет элемента, который имеет ключ 2, Итак, вы добавляете четвертый элемент. И это происходит на каждой итерации после этого; Вы добавляете новые элементы и $i никогда не достигнет счетчика вашего массива, заставляя вас зацикливаться, пока не закончится память.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]