Я создаю регистрационную форму с полями для имени, электронной почты и номера телефона. Чтобы проверить правильность ввода пользователя, у меня есть функция 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);