Intereting Posts

Как вставить значения в массив PHP в таблицу MySQL?

Я создаю регистрационную форму с полями для имени, электронной почты и номера телефона. Чтобы проверить правильность ввода пользователя, у меня есть функция validate_input() которая возвращает массив arr содержащий ввод, введенный пользователем (если пользовательский ввод действителен). arr затем передается в отдельную функцию, которая вставляет значения в arr в user стол MySQL, содержащий поля для name , email и phone .

Сначала я попробовал следующее:

 $insert_query = "INSERT INTO user (name, email, phone) VALUES ('$arr['name']', '$arr['email']', '$arr['phone']')"; $run_insert_query = mysqli_query($con, $insert_query); 

Но это не сработало. Некоторое чтение показало, что это неправильный способ вставки значений массива в базу данных. Поэтому я затем попробовал следующее ( на основе принятого ответа здесь ):

 $escaped_values = array_map('mysql_real_escape_string', array_values($arr)); $arr_values = implode(",", $escaped_values); $insert_query = "INSERT INTO user (name, email, phone) VALUES ($arr_values)"; $run_query = mysqli_query($con, $insert_query); 

Но это тоже не сработало. Любые идеи о том, как сделать эту работу?

Вы просто забыли установить правильные цитаты. Вот правильный синтаксис:

 $insert_query = "INSERT INTO user (name, email, phone) VALUES ('".$arr['name']."', '".$arr['email']."', '".$arr['phone']."')"; 

В вашей инструкции dml insert, строки и отформатированные даты должны быть указаны в одинарных кавычках. Поскольку mysql будет пытаться динамически передавать строки целым числам или поплавкам, вы можете попробовать процитировать все – но даже если вы его заработаете, это укусит вас, когда вы этого меньше всего ожидаете. Второй блок кода также зависит от данных, представленных в ожидаемом порядке. Обычно это вряд ли изменится, но это плохое программирование.

Вы не можете смешивать функции mysqli_ и mysql_. Прочитайте ошибки и предупреждения, о которых вам сообщает php.

Предполагая, что ваша функция validate_input () также вызывает mysql [i] _real_escape_string () для данных, чтобы предотвратить инъекцию sql (также плохая практика программирования – вы должны проверить выход ввода и выхода), вам просто нужно исправить семантику вашего кода в первый запрос: индексы ассоциативных массивов не следует указывать, если они уже заключены в «….»:

 $insert_query = "INSERT INTO user (name, email, phone) VALUES ('$arr[name]', '$arr[email]', '$arr[phone]')"; $run_insert_query = mysqli_query($con, $insert_query);