Varg VIkernes Ответов: 2

Как вставить массив в PHP?


Hi all, I try to insert an array in sql from php form. When I did var_dump of the query, this is what I got:
string(183) "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES (0,'dfhdfh',235235,'235235','235235','235235','235235','235235',13)" string(184) "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES (1,'djfdj',246246,'2462346','2463346','346346','346364','346346',13)" 


Однако это вставляет только второй объект, а не оба из них, поэтому мне интересно, что я могу сделать, чтобы вставить оба?
Вот этот код:
for($i=0; $i < count($question); $i++){
                $sql = "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES
                ($i,'$question[$i]',$mark[$i],'$answer_1[$i]','$answer_2[$i]','$answer_3[$i]','$answer_4[$i]','$correct[$i]',$id)";
                var_dump($sql);
                }
                mysqli_query($connection,$sql);

                $connection->close();


Что я уже пробовал:

Я попробовал сбросить запрос и получил
string(183) "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES (0,'dfhdfh',235235,'235235','235235','235235','235235','235235',13)" string(184) "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES (1,'djfdj',246246,'2462346','2463346','346346','346364','346346',13)"

2 Ответов

Рейтинг:
2

Patrice T

$sql = "INSERT INTO questions (id,question,mark,answer_1,answer_2,answer_3,answer_4,correct,fk_test) VALUES
                ($i,'$question[$i]',$mark[$i],'$answer_1[$i]','$answer_2[$i]','$answer_3[$i]','$answer_4[$i]','$correct[$i]',$id)";

Не обязательно решение вашего вопроса, но у вас есть еще одна проблема.
Никогда не создавайте SQL-запрос путем объединения строк. Рано или поздно вы сделаете это с помощью пользовательских вводов, и это откроет дверь к уязвимости под названием "SQL-инъекция", она опасна для вашей базы данных и подвержена ошибкам.
Одна кавычка в имени - и ваша программа выйдет из строя. Если пользователь вводит имя, например "Брайан О'Коннер", может привести к сбою вашего приложения, это уязвимость SQL-инъекции, и сбой-это наименьшая из проблем, вредоносный пользовательский ввод, и он продвигается к командам SQL со всеми учетными данными.
SQL-инъекция - Википедия[^]
SQL-инъекция[^]
Атаки SQL-инъекций на примере[^]
PHP: SQL-инъекция - руководство пользователя[^]
Шпаргалка по предотвращению инъекций SQL - OWASP[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? - Обмен Стеками Информационной Безопасности[^]


Рейтинг:
15

Richard MacCutchan

for($i=0; $i < count($question); $i++){
    $sql = "INSERT INTO questions ... text removed for readability
    var_dump($sql);
}
mysqli_query($connection,$sql);

$connection->close();

Ваш призыв к mysqli_query находится вне вашего цикла, поэтому будет выполнен только последний оператор.