Подготовка массива строк для добавления в базу данных - PullRequest
0 голосов
/ 05 января 2019

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

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

Есть ли у кого-нибудь способ применения надстрочных знаков к каждому значению массива? Я пробовал mysqli_real_escape_string вместо addlashes, но я получил ту же ошибку.

1 Ответ

0 голосов
/ 05 января 2019

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

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

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

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

...