У цьому уроці ми розглянемо, як вставляти дані в БД безпосередньо з ваших РНР-скриптів.
Вставка даних із використанням SQL
Ви використовуєте SQL для вставки даних у БД так само, як використовуєте SQL для створення БД та таблиць. Синтаксис SQL-запиту такий:
INSERT INTO Ім'яТаблиці (стовпець1, стовпець 2, ...) VALUES(значення1,значення 2, ...)
Як бачите, ви можете оновлювати кілька стовпців в одному SQL-операторі, вказуючи їх у розділеному комами списку. Але, зрозуміло, можна специфікувати лише один стовпець і одне значення. Стовпці, не згадані у цьому SQL-операторі, залишаться порожніми.
Приклад: Вставка нової персони до таблиці
У цьому прикладі ми використовуємо БД з Уроку 18 . Скажімо, ми хочемо вставити персону у БД. Це може бути Gus Gooseз номером телефону 99887766 та датою народження 1964-04-20 .
Оператор SQL може виглядати так:
$strSQL = "INSERT INTO people(FirstName,LastName,Phone,BirthDate) VALUES("Gus","Goose","99887766 ","1964-04-20")";
Як бачите, SQL-оператори можуть бути дуже довгими і можна легко втратити слід. Тому краще записувати SQL-оператор трохи інакше:
strSQL = "INSERT INTO people("; strSQL = strSQL. "FirstName,"; strSQL = strSQL. "LastName," strSQL = strSQL. "Phone,"; strSQL = strSQL. "birth)"; strSQL = strSQL. "VALUES ("; strSQL = strSQL . ""Gus", "; strSQL = strSQL. ""Goose", "; strSQL = strSQL. "99887766", ";
strSQL = strSQL. "1964-04-20"); mysql_query($strSQL) або die(mysql_error());.
Тут SQL-оператор будується з розподілом пропозиції на невеликі частини з наступним об'єднанням їх у змінну
$strSQL
?>
БД оновлено!
Збереження введення користувача в БД
Припустимо, у вас є проста форма: SaveЦя форма надсилається у файл
insert.php
, де ви, як показано в Уроці 11, можете отримати введення користувача, запросивши вміст форми. У даному випадку SQL-оператор може бути таким:
strSQL = "INSERT INTO people(FirstName) values("" . $_POST["FirstName"] . "")"
Аналогічно можна запитати дані кук, сесій рядків запиту, etc.
Найбільш поширені помилки початківців
Спочатку ви, можливо, отримуватимете купу повідомлень про помилки при спробах оновити БД. Працюючи з БД абсолютно неприпустимі ніякі похибки. Неправильно поставлена кома може означати, що БД не оновлюється, і ви отримаєте повідомлення про помилку. Нижче ми описуємо найпоширеніші помилки.
Неправильний тип даних
Важливо, щоб дані та тип даних стовпця відповідали один одному. Кожен стовпець може містити дані певного типу.
Наступний скріншот показує типи даних таблиці “people” з нашого прикладу. | Видається помилка, якщо ви, наприклад, спробуєте вставити текст або число в поле даних. Отже, встановлюйте тип даних якнайточніше. | Нижче наведено найбільш вживані типи даних: |
---|---|---|
Значення |
Тип даних | Розмір |
CHR |
Текст чи комбінація тексту та чисел. Може також використовуватися для числа, які не використовуються під час розрахунків (напр., номери телефонів). | До 255 символів - або довжина, що визначається "Length" |
TEXT |
Великі блоки тексту або комбінація тексту та чисел. | До 65,535 символів |
INT |
Числові дані для математичних обчислень. | 4 байти |
DATE |
Дати у форматі РРР-ММ-ДД | 4 байти |
3 байти |
TIME | Час у форматі чч:мм:сс |
DATETIME
Дата та час у форматі РРР-ММ-ДД чч:мм:сс
8 байтех, з пісні слів не викинеш! Але їх можна видалити, оновити чи вставити інші. Головне, щоб слова були внесені до бази даних. Сьогодні ми розповімо, як відбувається запис даних MySQL і як це зробити правильно, щоб пісня звучала!
Додавання записів за допомогою phpMyAdmin
В оболонці phpMyAdmin для адміністрування СУБД MySQL реалізовано «полегшений» функціонал додавання нових записів до таблиць бази даних. Через свою простоту він ідеально підходить як для зелених «чайників», так і для «ледачих» професіоналів.
Щоб занести нову інформацію до таблиці, слід зайти до програми під правами адміністратора. Потім у списках зліва вибрати потрібну базу та таблицю. Після цього у верхньому меню перейти через пункт «Вставити».
Після цього, щоб зробити запис в БД MySQL, заповнюємо в наступному вікні для всіх стовпців поля «Значення» і натискаємо внизу «Ок».
На наведеному вище скріншоті видно, що таблиця «Animals», що модифікується, складається з двох стовпців (полів): id і name. У другому розділі вказано тип кожного зі стовпців. Нам потрібно внести значення тільки для поля name, оскільки стовпець id є первинним ключем, і для нього під час створення таблиці встановлено автоінкремент. Це означає, що значення поля id буде генеруватися MySQL автоматично, додаючи до попереднього цілого числового значення 1.
Щоб дізнатися, яке поле записів даних MySQL є первинним ключем (primary key), в phpMyAdmin перейдіть меню (при обраній таблиці зліва в списку) на вкладку верхнього меню «Структура». Тут наводиться опис всіх полів таблиці, їх тип та додаткові характеристики.
Вставка даних за допомогою SQL-запитів
Але phpMyAdmin – це лише оболонка, а справжні адміністратори «спілкуються» з сервером MySQL за допомогою мови структурованих запитів. Тобто «розмовляють» із ним мовою SQL. Так як ми прагнемо стати справжніми професіоналами, то трохи «зануримося» у вивчення команд SQL у рамках теми, що розглядається. Ось запит, ввівши який у поле SQL, ви створите таку ж базу даних:
CREATE TABLE Animal (ID MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id));
CREATE TABLE Animal (ID MEDIUMINT NOT NULL AUTO_INCREMENT , name CHAR (30) NOT NULL, PRIMARY KEY (id)); |
Після створення таблиці та запису даних у базу MySQL (через вкладку «Вставити») програма повідомить вам, що в animals додано рядок зі значенням ідентифікатора 1. А трохи нижче у вікні редактора буде виведений код запиту, який за нас сформувала оболонка і надіслала серверу БД .
Код запиту:
INSERT INTO `my_db1`.`animal` (`id`, `name`) VALUES (NULL, "Cat");
INSERT INTO `my_db1`. `animal` (`id`, `name`) VALUES (NULL, "Cat"); |
Давайте докладніше вивчимо його. У SQL для вставлення нового рядка в таблицю використовується оператор INSERT. Він повідомляє серверу, що таблицю бази даних (my_db1 . animal) потрібно в поля id і name вставити зазначені значення (VALUES (NULL, ‘Cat’)).
Зверніть увагу, що стовпцю id ми вказуємо не числове значення, а NULL, оскільки для цього поля ми включили автозаповнення (автоінкремент).
Як вставити запис за допомогою PHP
Все розглянуте нами є лише «прелюдія» до основного дійства, в якому виходить на сцену його високість серверна мова програмування PHP. Саме завдяки йому MySQL як СУБД набула такого поширення в Мережі.
На зв'язці цих двох інтернет-технологій побудовано більшу частину всесвітнього павутиння. Куди не гляньте, скрізь ви знайдете їх: у сучасних CMS, «самописних» двигунах та на сервері.
Не дивно, що для запису даних MySQL PHP надає стільки вбудованих функцій. Але ми зупинимося на найголовніших із них. Ось код, який додає нове "тварина" в таблицю animals. Якщо сильно постаратися, то таким чином можна зібрати цілий звіринець:)
$con_str=mysql_connect("localhost", "root", "", "db1");
if(mysql_connect("localhost","root"))( echo "Hello!!"; ) mysql_select_db("db1",$con_str); $query_str="INSERT INTO `db1`.`animal` (`id`, `name`) VALUES (NULL, "dog")"; mysql_query($query_str); mysql_close(); $ con_str = mysql_connect ("localhost", "root", "", "db1"); if (mysql_connect ("localhost", "root")) (; echo "Hello!!" ; mysql_select_db ("db1", $con_str); |
$query_str =
"INSERT INTO `db1`.`animal` (`id`, `name`) VALUES (NULL, "dog")"
Для демонстрації всіх прикладів запису в базу MySQL за допомогою PHP ми застосовували «джентельменський набір» від Денвера. До нього входить локальний сервер Apache, сервер MySQL, phpMyAdmin та ще кілька корисних засобів створення та тестування програмного коду.
Потім у логічному блоці if ми перевірили наявність з'єднання з сервером БД. Після чого функції mysql_select_db() ми позначили базу, до якої будемо коннектитися. За допомогою функції mysql_query() запустили виконання SQL-запит, записаний в змінну $query_str. І наприкінці закрили встановлене з'єднання (функція mysql_close()). Тепер, якщо ми заглянемо у свій звіринець (таблицю animal), то виявимо там нового «вихованця».
Для його запису в MySQL PHP "любовно" надав весь необхідний набір функцій. Головне, на чому "палюються" новачки при використанні SQL у програмному коді - це неправильне написання запитів, порушення синтаксису та чергування знаків для екранування (лапок).
Щоб уникнути появи на своїй голові зайвого «сивого» волосся, краще перевіряти правильність написання запиту за допомогою phpMyAdmin. Для цього розмістіть код SQL у редакторі програми та запустіть його на виконання. Якщо щось не так, то програма почне «лаятись», виведе повідомлення червоного кольору і вкаже місцезнаходження помилки.
Як бачите, за допомогою MySQL можна і свій звіринець зібрати, і правильно змінити слова будь-якої пісні. І для запису в базу MySQL PHP підходить ідеально, тому ми радимо вам завести «тісну» дружбу із цією «великою» мовою програмування!
Останнє оновлення: 1.11.2015
Для додавання даних використовується вираз "INSERT":
$query ="INSERT INTO tovars VALUES(NULL, "Samsung Galaxy III","Samsumg")";
Вираз "INSERT" вставляє до таблиці один рядок. Після ключового слова INTO вказується назва таблиці, а після VALUES у дужках вказуються набір значень всіх стовпців. Так як у нас у таблиці три стовпці, ми вказуємо три значення.
Так як у минулій темі при створенні таблиці ми вказували наступну черговість стовпців: id, name, company, то в даному випадку для стовпця id передається значення NULL, для name – "Samsung Galaxy III", а для company – "Samsumg".
Оскільки стовпець id визначений як AUTO_INCREMENT, то нам необов'язково вказувати йому певне числове значення, і можна передати значення NULL, а MySQL присвоє стовпцю таке доступне значення.
Тепер розглянемо додавання даних з прикладу. Створимо файл create.phpз наступним вмістом:
Дані додані"; ) // закриваємо підключення mysqli_close($link); ) ?>
Додати нову модель
Тут код взаємодії з базою даних об'єднаний з функціональністю форм: за допомогою форми ми вводимо дані для додавання до бд.
Безпека та MySQL
Ми використовували функцію mysqli_real_escape_string() . Вона служить для екранізації символів у рядку, який потім використовується у запиті SQL. Як параметри вона приймає об'єкт підключення та рядок, який треба екранувати.
Таким чином, ми застосовуємо екранізацію символів фактично двічі: спочатку для sql-виразу за допомогою функції mysqli_real_escape_string(), а потім для html за допомогою функції htmlentities(). Це дозволить нам захиститися відразу від двох видів атак: XSS-атак та SQL-ін'єкцій.
Урок буде заснований на формі зворотного зв'язкунеобхідно практично на будь-якому сайті.======================================== ?>
Крок перший: Створення бази даних у MySQL
Відкриваємо phpMyAdmin(входить до базового пакету Denwerа), і створюємо базу з назвою " test_base", кодування вибираємо" CP1251_general_ci".
======================================== ?>
Крок другий: Створення таблиці в MySQLза допомогою SQL-запиту
Створити таблицю можна, звісно, і за допомогою стандартних засобів phpMyAdmin, але наочно буде видно структура створюваної таблиці.
Створюємо таблицю під назвою " test_tableі з шістьма полями з назвами:
"name" - тут зберігатимуться імена користувачів;
"email" - тут зберігатимуться адреси електронних скриньок користувачів;
"theme" - тут зберігатиметься тема повідомлення;
"message" - тут зберігатимуться повідомлення;
"data" - тут зберігатиметься дата відправлення повідомлення;
"id" - ідентифікаційний номер запису (рядки), ключове поле.SQL-запит:
create table test_table(
id int(11) not null auto_increment,
name varchar(255) not null,
email varchar(255) not null,
theme varchar(255) not null,
message text not null,
data date not null,
primary key (id)
);======================================== ?>
Крок третій: Створення форми
index.html:
Форма із збереженням у MySQL
Приклад форми із збереженням даних у MySQL