Команда INSERT INTO
Для ввода данных в БД понадобится команда INSERT INTO
. Также важно знать название и тип данных полей (колонок) таблицы, которые вы будете заполнять.
Синтаксис ввода данных в таблицу.
1 |
INSERT INTO table_name(col_name1, col_name2, ... , col_nameN) VALUES (value1, value2, ... , valueN); |
Для примера заполним таблицу books для хранения книг из базы данных Bookstore, которую мы создали в предыдущем посте.
Сначала выберем базу данных, для которой будем выполнять запросы.
1 |
USE Bookstore; |
Создадим в таблице две записи с некоторыми данными.
Все строковые значения, а также даты и время, необходимо обрамлять кавычками.
1 2 3 4 |
INSERT INTO books(title, author, publish_year, genre, price) VALUES ('Дубровский', 'Александр Пушкин', 1855, 'Драма,Повесть', 125.50); INSERT INTO books(title, author, publish_year, genre, price) VALUES ('Нос','Николай Гоголь', 1836, 'Повесть', 150); |
Создание записи таблицы в терминале.
[root@centos7 ~]# mysql -u root -p
Enter password:
mysql> USE Bookstore;
Database changed
mysql> INSERT INTO books
-> (title, author, publish_year, genre, price)
-> VALUES
-> ('Дубровский', 'Александр Пушкин', 1855, 'Драма,Повесть', 125.50);
Query OK, 1 rows affected (0.00 sec)
mysql> INSERT INTO books
-> (title, author, publish_year, genre, price)
-> VALUES
-> ('Нос','Николай Гоголь', 1836, 'Повесть', 150);
Query OK, 1 rows affected (0.00 sec)
mysql>
Как ввести данные в БД с помощью HTML формы и PHP (PDO)
Для ввода большого количества запросов гораздо удобнее использовать HTML форму, поля которой будут соотнесены с полями таблицы в базе данных.
Создадим форму в файле index.php
для заполнения таблицы books.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>INSERT INTO</title> <style> label{display: inline-block;width: 170px;} form > div{margin-bottom: 5px;} </style> </head> <body> <h2>Команда INSERT INTO</h2> <form action="insert_into.php" method="POST"> <div> <label for="Title">Название книги *:</label> <input type="text" id="Title" name="book_title" required> </div> <div> <label for="Author">Имя автора *:</label> <input type="text" id="Author" name="book_author" required> </div> <div> <label for="Publish_year">Год публикации:</label> <input type="number" id="Publish_year" name="book_publish_year"> </div> <div style="display: inline-block; vertical-align: top;"> <label>Жанр произведения: </label> </div> <div style="display: inline-block; vertical-align: top;"> <input type="checkbox" id="Genre_drama" name="book_genre[]" value="Драма"> <label for="Genre_drama">Драма</label><br> <input type="checkbox" id="Genre_novel" name="book_genre[]" value="Роман"> <label for="Genre_novel">Роман</label><br> <input type="checkbox" id="Genre_narrative" name="book_genre[]" value="Повесть"> <label for="Genre_narrative">Повесть</label><br> <input type="checkbox" id="Genre_tale" name="book_genre[]" value="Рассказ"> <label for="Genre_tale">Рассказ</label><br> <input type="checkbox" id="Genre_poem" name="book_genre[]" value="Поэма"> <label for="Genre_poem">Поэма</label> </div> <div> <label for="Price">Цена:</label> <input type="number" step="0.01" id="Price" name="book_price"> </div> <input type="submit" value="Отправить в БД"> </form> </body> </html> |
В результате у нас получится следующая форма.

Отдельно создадим файл insert_into.php
, в котором будем обрабатывать передачу данных из формы в базу данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
<?php $db_server = "localhost"; $db_user = "root"; $db_password = "MySafePass4!"; $db_name = "Bookstore"; try { // Открываем соединение, указываем адрес сервера, имя бд, имя пользователя и пароль, // также сообщаем серверу в какой кодировке должны вводится данные в таблицу бд. $db = new PDO("mysql:host=$db_server;dbname=$db_name", $db_user, $db_password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET NAMES utf8")); // Устанавливаем атрибут сообщений об ошибках (выбрасывать исключения) $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Переносим данные из полей формы в переменные. $book_title=$_POST['book_title']; $book_author=$_POST['book_author']; $book_publish_year=$_POST['book_publish_year']; $book_price=$_POST['book_price']; // Переносим данные (отмеченные жанры) из полей формы в массив $book_genres = array(); if(!empty($_POST['book_genre'])){ foreach($_POST['book_genre'] as $genre_selected){ $book_genres[] = $genre_selected; } } // Используем Prepared statements (заранее скомпилированное SQL-выражение) для защиты от SQL-инъекций. // Создаем ассоциативный массив для подстановки данных в запрос. $data = array( 'title' => "$book_title", 'author' => "$book_author", 'year' => "$book_publish_year", 'price' => "$book_price", ); // Запрос на создание записи в таблице // Если есть хоть один отмеченный жанр в форме, то составляем запрос, внося все отмеченные жанры, // иначе название жанра не вносим в таблицу. if(sizeof($book_genres) > 0){ $sql = "INSERT INTO books(title, author, publish_year, genre, price)". " VALUES(:title, :author, :year, '" . implode(',', $book_genres) . "', :price)"; } else { $sql = "INSERT INTO books(title, author, publish_year, price)". " VALUES(:title, :author, :year, :price)"; } // Перед тем как выполнять запрос предлагаю убедится, что он составлен без ошибок. //echo $sql; // Подготовка запроса (замена псевдо переменных :title, :author и т.п. на реальные данные) $statement = $db->prepare($sql); // Выполняем запрос $statement->execute($data); echo "Запись успешно создана!"; } catch(PDOException $e) { echo "Ошибка при создании записи в базе данных: " . $e->getMessage(); } // Закрываем соединение $db = null; ?> |
Теперь мы можем убедится в успехе заполнения таблицы books. Выведем значения заполненных полей таблицы.
1 |
SELECT id, title, author, price, genre, publish_year FROM books; |
Получим следующий результат.
mysql> SELECT id, title, author, price, genre, publish_year FROM books;
+----+---------------------+--------------------+--------+------------------+--------------+
| id | title | author | price | genre | publish_year |
+----+---------------------+--------------------+--------+------------------+--------------+
| 1 | Дубровский | Александр Пушкин | NULL | Драма,Повесть | 1855 |
| 2 | Нос | Николай Гоголь | NULL | Повесть | 1836 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 240.50 | Роман | 1940 |
+---------+---------------------+--------------------+--------+------------------+--------------+
3 rows in set (0.00 sec)
mysql>