Як записати дані MySQL з використанням PHP
Привіт шановний відвідувач!
Як зазначалося раніше, такий спосіб не замінний за збереження результатів роботи будь-яких програм. Зазвичай у таких випадках у кожному запиті здійснюється додавання одного нового запису або зміна чи видалення існуючого.
Але, оскільки в нашому випадку потрібно записати відразу кілька рядків, то для демонстрації такої можливості ми спочатку перевіримо запис у таблицю всього лише одного рядка, а потім складемо PHP-скрипт, який по черзі, звертаючись до відповідної функції, зробить це з усіма іншими рядками. .
Таким чином, ми перевіримо за допомогою PHP запис як одиночного рядка, так і відразу кількох за один раз виконання скрипта.
А на завершення перетворимо отриманий PHP-скрипт, виділивши з нього фрагмент запиту до бази даних в окрему функцію.
Такий докладний розгляд обумовлений тим, що при практичній реалізації складання різних програм, пов'язаних з роботою сайту, нерідко доводиться використовувати подібні рішення.
Сподіваюся, що показані тут методи запису даних MySQL будуть корисні особливо тим, хто робить перші кроки в освоєнні цієї досить важливої теми. Адже вміння записувати дані у таблиці MySQL із використанням PHP значно розширює можливості роботи з сайтом.
- Записуємо дані одного рядка у таблицю MySQL
- Складаємо PHP-скрипт для запису всіх рядків таблиці
- Складаємо окрему функцію запису даних до таблиці 'url_php'
- Вихідні файли сайту
Записуємо дані одного рядка в таблицю MySQL
Для того, щоб скласти запит до бази даних за допомогою PHP, знову звернемося до тих же вихідних даних, які використовували прирозгляд попередніх способів.
| id (№ пп) | title (Заголовок сторінки) | file (ім'я файлу) | url (ЧПУ) |
| 1 | Головна | index.php | (див. примітку *) |
| 2 | Статистика угонів | article.php | statistika-ugonov |
| 3 | Способи маркування | action.php | sposobi-markirovki |
| 4 | Отримати знижку | righting.php | poluchity-skidku |
| 5 | Контакти | contacts.php | kontakti |
* - url головної сторінки зазвичай має вигляд доменного імені без додавання будь-яких символів. У нашому випадку – це "avtobezugona.ru".
Виходячи з цього, кількість параметрів для кожного запису повинна відповідати трьом полям таблиці, а саме: "title", "file" і "url" (ідентифікатор "id" при створенні записів присвоюється автоматично).
Для написання відповідного PHP-коду будемо використовувати функцію виконання запиту до бази данихqueryпокращеного модуля MySQLi PHP, в якій одним із параметрів буде текст запиту у вигляді рядка на мові SQL.
При цьому як параметри самого SQL-запиту будуть використовуватися три вищеперелічені поля вихідної таблиці даних.
По суті цей SQL-запит буде аналогічний тому, який був складений раніше в статті Записуємо дані MySQL з використанням SQL-запитів. Основна відмінність лише в тому, що в даному випадку він буде призначений для запису лише одного рядка, а не кількох, як у попередньому варіанті.
Нижче наведено відповідний PHP-код, при виконанні якого будуть записуватися дані із зазначенимипараметрами у наступний по порядку рядок.
Раніше, при розгляді PHP-коду як приклади наводилися варіанти процедурного та об'єктно-орієнтованого стилів написання функцій модуля MySQLi. У подальших розглядах використовуватиметься лише об'єктно-орієнтований стиль.
Виходячи з того, що ці два варіанти відрізняються лише несуттєвою відмінністю в написанні функцій (у процедурному використовуються звична форма функції PHP, в об'єктно-орієнтованому - мовні конструкції звернень до методів та властивостей об'єктів), то тим, хто звик працювати з процедурним стилем, при бажанні нескладно зробити відповідні зміни.
//----Запис одного рядка до таблиці "url_php"-------------
if( !$mysqli -> query ( "INSERT INTO `url_php` (`title`, `file`, `url`) VALUES (`$title', '$file', '$url ')" ))
die('Запис не виконано: Код помилки: ' .$mysqli->errno. ' - ' .$mysqli->error );
echo'Запис даних до таблиці "url_php" виконано успішно' ;
Як видно, змінним $title , $file і $url (поз. 3÷5) надано значення першого рядка вихідної таблиці (для змінної $url заданий порожній рядок двома одиночними лапками).
Для виконання запиту до бази даних тут використовується об'єктно-орієнтований стиль, де ідентифікатором з'єднання $mysqli як об'єкт викликається методqueryіз SQL-запитом (поз.6).
Слід зазначити, що тут SQL-запит складений за аналогією з аналізованим у попередній статті. Тільки тепер у ролі значень у ньому використовуються не конкретні дані, а задані змінні $title , $file і $url , які стосуються одному рядку.
І останнє, що варто відзначити за представленим PHP-кодом, це наявність перевірки результатіввиконання запиту.
Так, у випадку, якщо з яких-небудь причин запит не буде виконано, функція 20 (поз.7) зупинить роботу програми з виведенням повідомлення на екран браузера. При цьому буде відображено код і текст помилки, отримані за допомогою властивостей errno та error відповідно.
Якщо ж запит на створення рядка таблиці пройде успішно, для підтвердження такого результату за допомогою функціїecho(поз.9) буде виведено на екран повідомлення з відповідним текстом.
Слід звернути увагу на те, що тут це передбачено лише для демонстрації. У звичайних умовах подібні повідомлення про успішність виконання запитів не використовуються. Адже навряд чи така технічна інформація щодо роботи сайту буде цікава користувачам, і її використання призводитиме лише до засмічення сторінок сайту зайвою інформацією.
Тепер, розмістимо цей код у файл "index.php" на головній сторінці сайту "newsite.local" і перевіримо запис першого рядка в таблицю "url_php". Для цього достатньо буде поновити головну сторінку.

Як видно, угорі сторінки після завантаження з'явилося повідомлення про успішне виконання запису.

Також можна перевірити контроль за виконанням сформованого запиту. Для цього введемо в його код деяку помилку, скажімо до імені першого поля "title" додамо цифру 7, як показано на наступному малюнку.
//----Запис одного рядка до таблиці "url_php"-------------
if( !$mysqli -> query ( "INSERT INTO `url_php` (`title7`, `file`, `url`)) VALUES ('$title', ' $file', '$url')" ))
die('Запис не виконано: Код помилки: ' .$mysqli->errno. ' - ' .$mysqli->error );
echo'Запис даних до таблиці "url_php" виконано успішно' ;
І якщо тепер знову оновити головну сторінку, то завантаження її буде зупинено, а на екрані браузера з'явиться інформаційне повідомлення з кодом помилки і з її описом. В даному випадку виявлено невідоме поле з ім'ям "title7" (якраз те, в яке ми свідомо внесли помилку).

Такий контроль результату виконання PHP-функцій значно полегшує пошук помилок під час написання блоків програм, пов'язаних із роботою з базою банних MySQL. Так що використання такої можливості може бути дуже корисним у практичній роботі.
Таким чином, ми перевірили з використанням PHP запис одного рядка в таблицю MySQL.
Складаємо PHP-скрипт для запису всіх рядків таблиці
Для заповнення рядків, що залишилися, нам необхідно скласти такий код, при виконанні якого відбувалося б почергове виконання запиту на запис рядка, але не з постійними значеннями змінних $title , $file і $url , а змінюваними відповідно до вихідних даних.
Таке завдання буде нескладно вирішити, якщо використовувати як змінні масиви зі значеннями по кожному рядку і конструкцію циклуforдля виконання повторних запитів до бази даних.
Нижче показаний такий варіант вирішення поставленого завдання.
//----Запис кількох рядків у таблицю "url_php"-------------
$title_array =array( 'Головна', 'Статистика угонів', 'Способи маркування', 'Отримати знижку', 'Контакти' );
$file_array =array( 'index.php', 'article.php', 'action.php', 'righting.php', 'contacts.php' );
$url_array =array( '', 'statistika-ugonov', 'sposobi-markirovki', 'poluchity-skidku', 'kontakti' );
if( !$mysqli -> query ( "INSERT INTO `url_php` (`title`, `file`, `url`) VALUES (`$title','$file', '$url')" ))
die('Запис не виконано: Код помилки: ' .$mysqli->errno. ' - ' .$mysqli->error );
echo'Запис даних до таблиці "url_php" виконано успішно' ;
Тут для призначення змінних використовуються числові масиви (поз. 3÷5), в яких кожен елемент має числовий індекс.
А з допомогою конструкції циклуfor, залежно від індексу, змінним $title , $file , $url надаються необхідні значення (поз. 7÷9).
При цьому в тіло циклу включений також і виклик методуquery(поз.10) з SQL-запитом, що забезпечить виконання запису даних у рядок з отриманими значеннями змінних при кожному виконанні циклуfor.
Як відомо, цей оператор повторює певні дії (інструкції), доки не буде виконано задану умову. У цьому випадку цикли почнуть виконуватися зі значенням змінної $i , рівної одиниці і закінчаться, коли вона прийме значення більше чотирьох.
Враховуючи, що за умовчанням числові масиви починаються з індексу "0", то при виконанні даного скрипту буде почергово відбуватися запис всіх вихідних даних, починаючи з другого рядка. Значення першого рядка не будуть записані, оскільки індекс "0" у цикліforбуде пропущений.
Як видно, отриманий код виявився досить простим, лише кілька рядків.
Тепер перевіримо його роботу, знову оновивши головну сторінку.

Таким чином, ми перевірили можливість додавання відразу кількох записів у таблицю MySQL за допомогою PHP.
Складаємо окрему функцію запису даних у таблицю 'url_php'
У попередніх прикладах ми виконували запит у PHP-коді, безпосередньо розміщеному в основній програмі.
Але, на практиці часто буває, що одні й ті саміФункції під час роботи з базою даних можуть виконуватися різними блоками програми. Тому, для зменшення загального обсягу коду, зручно ці функції винести в окреме певне місце, і при необхідності їх використання, просто звертатися до них за допомогою лише одного рядка.
Ось зараз ми і зробимо такі перетворення з раніше отриманим PHP-скриптом.
Для цього фрагмент коду із запитом до бази данихqueryвинесемо в окремий файл "functions.php", який був створений раніше в статті Підключаємо базу даних MySQL з використанням процедурного та об'єктно-орієнтованого стилю MySQLi. І на його основі створимо окрему функцію запису рядка в таблицю "url_php" під назвою "rihgtUrlPhp".
Отриманий в результаті цього код функціїrihgtUrlPhp()набуде наступного вигляду.
//----Функція запису рядка в таблицю "url_php"-------------
functionrihgtUrlPhp ($title, $file, $url)
if( !$mysqli -> query ( "INSERT INTO `url_php` (`title`, `file`, `url`) VALUES (`$title', '$file', '$url ')" ))
die('Запис не виконано: Код помилки: ' .$mysqli->errno. ' - ' .$mysqli->error );
Тут необхідно відзначити, що змінні $title, $file і $url тепер є параметрами новоствореної функції rihgtUrlPhp() (поз.3).
Крім того, для того, щоб як змінна $mysqli використовувалася саме змінна ідентифікатора з'єднання, тут вона позначена як глобальна (поз.4).
Що стосується оператораfor, його початковий індекс замінений з 1 на 0. Це зроблено для того, щоб при виконанні скрипту відбувався запис усіх рядків, включаючи перший.
А щодо коду, призначеного для перевірки результатів виконання запиту, то він нічим невідрізняється від попередніх варіантів.
І останнє, що залишилося зробити, це замість віддаленого запиту до бази даних, додати до нього виклик до новоствореної функції.
Таким чином, код PHP-скрипту деяким чином зміниться (світлим кольором виділено рядки із змінами).
//----Запис кількох рядків у таблицю "url_php" через виділену функцію-------------
$title_array =array( 'Головна', 'Статистика угонів', 'Способи маркування', 'Отримати знижку', 'Контакти' );
$file_array =array( 'index.php', 'article.php', 'action.php', 'righting.php', 'contacts.php' );
$url_array =array( '', 'statistika-ugonov', 'sposobi-markirovki', 'poluchity-skidku', 'kontakti' );