Справочники, инструменты, документация

SQL: Вставка данных в таблицу базы данных с помощью PHP

После создания таблицы, следующим шагом будет ввод данных в таблицу. Чтобы ввести данные в таблицу, мы должны соблюдать определенные правила:
  • Если значение, которое нужно вставить, является строкой, мы должны заключить ее в кавычки.
  • Числовое значение нельзя заключать в кавычки.
  • NULL нельзя заключать в кавычки.
  • Если столбец в таблице имеет параметр AUTO_INCREMENT, то нам не нужно вставлять данные в этот столбец, т.к. данные будут вставляются автоматически.

Для вставки новых строк в таблицу базы данных используется оператор INSERT INTO.

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...)

Вставка строки в таблицу

Давайте сделаем SQL-запрос, используя оператор INSERT INTO с соответствующими значениями, после чего мы передадим его функции PHP mysqli_query() для вставки данных в таблицу.

Следующий пример вставляет новую строку в таблицу persons, указывая значения для полей first_name, last_name и email в трех различных версиях: с использованием синтаксиса объектно-ориентированной процедуры MySQLi, процедурный MySQLi и процедуры PDO.

<?php
/* Попытка подключения к серверу MySQL. Предполагая, что вы используете MySQL
 сервер с настройкой по умолчанию (пользователь root без пароля) */
$link = mysqli_connect("localhost", "root", "", "demo");

// Проверка подключения
if($link === false){
  die("ОШИБКА: не удалось подключиться. " . mysqli_connect_error());
}

// Попытка выполнения запроса вставки
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Peter', 'Parker', 'peterparker@mail.com')";
if(mysqli_query($link, $sql)){
  echo "Записи успешно вставлены.";
} else{
  echo "ERROR: Не удалось выполнить $sql. " . mysqli_error($link);
}

// Закрыть соединение
mysqli_close($link);
?>

Примечание: Если столбец — это AUTO_INCREMENT (например, столбец «id»), то его не нужно указывать в запросе SQL. Этот модификатор сообщает MySQL автоматически присвоить значение этому полю.

Вставка нескольких строк в таблицу

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

В следующем примере вставим еще несколько строк в таблицу persons:

<?php
/* Попытка подключения к серверу MySQL. Предполагая, что вы используете MySQL
 сервер с настройкой по умолчанию (пользователь root без пароля) */
$link = mysqli_connect("localhost", "root", "", "demo");

// Проверка подключения
if($link === false){
  die("ERROR: Ошибка подключения. " . mysqli_connect_error());
}

// Попытка выполнения запроса вставки
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES
      ('John', 'Rambo', 'johnrambo@mail.com'),
      ('Clark', 'Kent', 'clarkkent@mail.com'),
      ('John', 'Carter', 'johncarter@mail.com'),
      ('Harry', 'Potter', 'harrypotter@mail.com')";
if(mysqli_query($link, $sql)){
  echo "Записи успешно вставлены.";
} else{
  echo "ERROR: Не удалось выполнить $sql. " . mysqli_error($link);
}

// Закрыть соединение
mysqli_close($link);
?>

Теперь перейдите в phpMyAdmin и проверьте данные таблицы persons внутри базы данных. Вы обнаружите, что значение столбца id присваивается автоматически путем увеличения значения предыдущего идентификатора на 1.

В MySQL каждая запись представляет собой полный запрос INSERT INTO, разделенный точкой с запятой.

Чтобы облегчить чтение синтаксиса, мы, в отличие от предыдущего примера, разбиваем его на отдельные запросы и добавляем их друг к другу с помощью оператора .=:

$sql = "INSERT INTO Users (name, email)
    VALUES ('James Bond', 'bond@mail.com');";
$sql .= "INSERT INTO Users (name, email)
    VALUES ('John Wick', 'wick@mail.com');";
$sql .= "INSERT INTO Users (name, email)
    VALUES ('Ethan Hunt', 'hunt@mail.com')";

Поскольку точка с запятой является частью SQL-запроса, а не оператором PHP, мы добавляем ее в кавычки запроса.

Вставка данных в базу из HTML-формы

В предыдущем разделе мы узнали, как вставлять данные в базу данных из сценария PHP. Теперь посмотрим, как мы можем вставить данные в базу данных, полученную из HTML-формы. Давайте создадим HTML-форму, которую можно использовать для вставки новых записей в таблицу persons.

Создадим простую HTML-форма с тремя текстовыми <input> полями и кнопкой отправки:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Add Record Form</title>
</head>
<body>
<form action="insert.php" method="post">
  <p>
    <label for="firstName">Имя:</label>
    <input type="text" name="first_name" id="firstName">
  </p>
  <p>
    <label for="lastName">Фамилия:</label>
    <input type="text" name="last_name" id="lastName">
  </p>
  <p>
    <label for="emailAddress">Email:</label>
    <input type="text" name="email" id="emailAddress">
  </p>
  <input type="submit" value="Отправить">
</form>
</body>
</html>

Получение и вставка данных формы

Когда пользователь нажимает кнопку отправки HTML-формы, в приведенном выше примере данные формы отправляются в файл-обработчик PHP 'insert.php'. Файл 'insert.php' подключается к серверу базы данных MySQL, извлекает поля форм с использованием переменной PHP $_REQUEST и, наконец, выполняет запрос на вставку записей в БД.

Ниже приведен полный код нашего файла insert.php:

<?php
/* Попытка подключения к серверу MySQL. Предполагая, что вы используете MySQL
 сервер с настройкой по умолчанию (пользователь root без пароля) */
$link = mysqli_connect("localhost", "root", "", "demo");

// Проверьте подключение
if($link === false){
  die("ERROR: Нет подключения. " . mysqli_connect_error());
}

// экранирует специальные символы в строке
$first_name = mysqli_real_escape_string($link, $_REQUEST['first_name']);
$last_name = mysqli_real_escape_string($link, $_REQUEST['last_name']);
$email = mysqli_real_escape_string($link, $_REQUEST['email']);

// Попытка выполнения запроса вставки
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('$first_name', '$last_name', '$email')";
if(mysqli_query($link, $sql)){
  echo "Записи успешно добавлены.";
} else{
  echo "ERROR: Не удалось выполнить $sql. " . mysqli_error($link);
}

// Закрыть соединение
mysqli_close($link);
?>

Функция mysqli_real_escape_string() экранирует специальные символы в строке и создает допустимую строку SQL для защиты от атаки, при которой злоумышленник может внедрить или выполнить вредоносный код SQL.

Это простой пример вставки данных формы в таблицу базы данных MySQL. Вы можете расширить этот пример и сделать его более интерактивным, добавив проверки для пользовательского ввода перед вставкой его в таблицы базы данных. Ознакомьтесь с руководством по проверке форм PHP, чтобы узнать больше о валидации и проверке вводимых пользователем данных с помощью PHP.