Будет ли функция php «вставлять в» создавать новые столбцы, если они еще не определены, или возвращать ошибку? - PullRequest
0 голосов
/ 03 марта 2010

Я бы хотел использовать цикл foreach для вставки ассоциативного массива _POST в базу данных с помощью INSERT INTO.

Что мне нужно знать, если мои данные _POST содержат ключи, которые не соответствуют столбцам моей базы данных, INSERT INTO просто создаст эти столбцы в базе данных?

если нет, то вернет ли это ошибку и вообще не обновит мою базу данных? или он вернет ошибку, но все равно обновит мою базу данных с максимально возможным количеством допустимых записей?

Я бы предпочел последнюю ситуацию. Вот что я хочу сделать:

Пользователь заполняет форму с несколькими полями -> Я делаю что-то с ответами в _POST, может быть, некоторые вычисления в javascript, или отправляю электронное письмо -> Я храню некоторые, но не все поля в моей базе данных Ссылка на будущее, цикл по массиву и сохранение всего, что соответствует, кажется самым простым способом сделать это.

В идеале я хотел бы иметь возможность повторно использовать этот код в различных ситуациях, поэтому здесь я хочу получить более подробное и тонкое понимание того, как работает INSERT INTO.

Ответы [ 3 ]

3 голосов
/ 03 марта 2010

Попытка вставить в несуществующие столбцы приведет к ошибке, и строка не будет вставлена.

Почему бы просто не определить ассоциативный массив в вашем PHP-файле, который перечисляет столбцы в вашей БД, а затем проверить, является ли каждое поле членом этого массива, прежде чем включать его в INSERT?

$allowed_columns = array(
   "name" => 1,
   "phone" => 1,
   "address" => 1
);

foreach($_POST as $key => $val) {
    if(!isset($allowed_columns[$key])) continue;
    //otherwise, add this field after properly
    //validating/escaping the contents of $val
}
1 голос
/ 03 марта 2010

INSERT INTO вставит значения в поля, которые уже существуют, если они не существуют, возникает ошибка. Если вы вставляете одну запись для каждого запроса, то, если одна строка не может быть вставлена, следующая строка будет.

Предупреждение: вы должны изучить SQL-инъекции. Взятие данных, отправленных пользователем, без проверки или экранирования очень опасно. Злоумышленник может легко удалить все записи в вашей базе данных или получить конфиденциальные данные пользователя, если вы не будете осторожны.

Есть много хороших вопросов об SQL-инъекциях в отношении переполнения стека и в Интернете в целом.

0 голосов
/ 03 марта 2010

Произойдет ошибка, и вставка не удастся.

...