Записываем данные MySQL с использованием PHP
Здравствуйте, уважаемый посетитель!
В предыдущих статьях мы рассмотрели возможность ввода данных MySQL в веб-интефейсе phpMyAdmin двумя способами - в ручную, записывая информацию в каждую ячейку таблицы и с помощью подготовленного SQL-запроса. Сегодня же рассмотрим еще один вариант, используя для этого 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 |
Рис1.
* - url главной страницы обычно имеет вид доменного имени без добавления каких-либо символов. В нашем случае - это "avtobezugona.ru".
Исходя из этого следует, что количество параметров для каждой записи должно соответствовать трем полям таблицы, а именно: "title", "file" и "url" (идентификатор "id" при создании записей присваивается автоматически).
Для написания соответствующего PHP-кода будем использовать функцию выполнения запроса к базе данных query улучшенного модуля MySQLi PHP, в которой одним из параметров будет являться текст запроса в виде строки на языке SQL.
При этом в качестве параметров самого SQL-запроса будут использоваться три вышеперечисленных поля исходной таблицы данных.
По сути, этот SQL-запрос будет аналогичен тому, который был ранее составлен в предыдущей статье. Основное отличие состоит лишь только в том, что сейчас он будет предназначен для записи всего одной строки, а не нескольких, как в предыдущем варианте.
Ниже представлен соответствующий PHP-код, при выполнении которого будут записываться данные с указанными параметрами в следующую по порядку строку.
Ранее, при рассмотрении PHP-кода в качестве примеров приводились варианты процедурного и объектно-ориентированного стилей написания функций модуля MySQLi. В дальнейших рассмотрениях будет использоваться только объектно-ориентированный стиль.
Исходя из того, что эти два варианта отличаются лишь несущественным отличием в написании функций (в процедурном используются привычная форма функции PHP, в объектно-ориентированном - языковые конструкции обращений к методам и свойствам объектов), то тем, кто привык работать с процедурным стилем, при желании несложно будет сделать соответствующие изменения.
-
-
//----Запись одной строки в таблицу "url_php"-------------
-
$title = 'Главная';
-
$file = 'index.php';
-
$url = '';
-
if (!$mysqli->query("INSERT INTO `url_php` (`title`, `file`, `url`) VALUES ('$title', '$file', '$url')")) {
-
die('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
echo 'Запись данных в таблицу "url_php" выполнена успешно';
-
?>
Рис.2
Как видно, переменным $title, $file и $url (поз. 3÷5) присвоены значения первой строки исходной таблицы (для переменной $url задана пустая строка двумя одиночными кавычками).
Для выполнения запроса к базе данных здесь используется объектно-ориентированный стиль, где идентификатором соединения $mysqli в качестве объекта вызывается метод query с SQL-запросом (поз.6).
Следует отметить, что здесь SQL-запрос составлен по аналогии с рассматриваемым в предыдущей статье. Только теперь в качестве значений в нем используются не конкретные данные, а заданные переменные $title, $file и $url, относящиеся к одной строке.
И последнее, что стоит отметить по представленному PHP-коду, это наличие проверки результатов выполнения запроса.
Так, в случае, если по каким-либо причинам запрос не будет выполнен, функция die() (поз.7) остановит работу программы с выводом сообщения на экран браузера. При этом будут отображены код и текст ошибки, полученные с помощью свойств errno и error, соответственно.
Как ранее отмечалось, сейчас на этапе разработки для контроля работы с базой данных, информацию об ошибке мы будем выводить на экран с помощью функции die(). В дальнейшем, при создании механизма обработки ошибок, мы заменим ее на другую, обеспечив вывод сообщения об ошибке не на экран, а в специально отведенный для этого лог-файл.
В случае же, если запрос на создание строки таблицы пройдет успешно, для подтверждения такого результата с помощью функции echo (поз.9) будет выведено на экран сообщение с соответствующим текстом.
Следует обратить внимание, что здесь это предусмотрено только для демонстрации. В обычных условиях подобные сообщения об успешности выполнения запросов не используются. Ведь, вряд ли такая техническая информация по работе сайта будет интересна пользователям, и ее использование будет приводить только к засорению страниц сайта излишней информацией.
Теперь, разместим данный код в файл "index.php" главной странице сайта "newsite.local" и проверим запись первой строки в таблицу "url_php". Для этого достаточно будет обновить главную страницу.

Рис.3
Как видно, вверху страницы после загрузки появилось сообщение об успешном выполнении записи.
А если в веб-приложении phpMyAdmin теперь посмотреть ее содержание, то можно увидеть, что появилась первая строка с идентификатором "1".

Рис.4
Также можно проверить контроль выполнения сформированного запроса. Для этого, введем в его код некоторую ошибку, скажем к имени первого поля "title" добавим цифру 7, как показано на следующем рисунке.
-
-
//----Запись одной строки в таблицу "url_php"-------------
-
$title = 'Главная';
-
$file = 'index.php';
-
$url = '';
-
if (!$mysqli->query("INSERT INTO `url_php` (`title7`, `file`, `url`) VALUES ('$title', '$file', '$url')")) {
-
die('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
echo 'Запись данных в таблицу "url_php" выполнена успешно';
-
?>
Рис.5
И если, теперь снова обновить главную страницу, то загрузка ее будет остановлена, а на экране браузера появится информационное сообщение с кодом ошибки и с ее описанием. В данном случае выявлено неизвестное поле с именем "title7" (как раз то, в которое мы заведомо внесли ошибку).

Рис.6
Такой контроль результата выполнения 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');
-
for ($i = 1; $i <= 4; $i++) {
-
$title = $title_array[$i];
-
$file = $file_array[$i];
-
$url = $url_array[$i];
-
if (!$mysqli->query("INSERT INTO `url_php` (`title`, `file`, `url`) VALUES ('$title', '$file', '$url')")) {
-
die('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
}
-
echo 'Запись данных в таблицу "url_php" выполнена успешно';
-
?>
Рис.7
Здесь, для назначения переменных используются числовые массивы (поз. 3÷5), в которых каждый элемент имеет числовой индекс.
А с помощью конструкции цикла for, в зависимости от индекса, переменным $title, $file, $url присваиваются нужные значения (поз. 7÷9).
При этом, в тело цикла включен также и вызов метода query (поз.10) с SQL-запросом, что обеспечит выполнение записи данных в строку с полученными значениями переменных при каждом выполнении цикла for.
Как известно, этот оператор повторяет определённые действия (инструкции), пока не будет выполнено заданное условие. В данном случае циклы начнут выполняться со значения переменной $i, равной единицы и закончатся, когда она примет значение больше четырех.
Учитывая, что по умолчанию числовые массивы начинаются с индекса "0", то при выполнении данного скрипта будет поочередно происходить запись всех исходных данных, начиная со второй строки. Значения первой строки записаны не будут, так как индекс "0" в цикле for будет пропущен.
Как видно, полученный код оказался довольно простым, всего лишь в несколько строк.
Теперь проверим работу его, снова обновив главную страницу.

Рис.8
Если сделано все правильно и в коде не будет никаких ошибок, то в таблицу "url-php" будут занесены все оставшиеся строки. В итоге, как видно в приведенном скриншоте, ее содержание в точности будет повторять то, которое мы получали другими способами, рассматриваемыми в предыдущих статьях.
Таким образом, мы проверили возможность добавления сразу несколько записей в таблицу MySQL с помощью PHP.
Составляем отдельную функцию записи данных в таблицу 'url_php'
В предыдущих примерах мы выполняли запрос в PHP-коде, непосредственно размещенном в основной программе.
Но, на практике часто бывает, что одни и те же функции при работе с базой данных могут выполняться разными блоками программы. Поэтому, для уменьшения общего объема кода, удобно эти функции вынести в отдельное определенное место, и при необходимости их использования, просто обращаться к ним с помощью всего лишь одной строки.
Вот сейчас мы и проделаем такие преобразования с полученным ранее PHP-скриптом.
Для этого фрагмент кода с запросом к базе данных query вынесем в отдельный файл "functions.php", который ранее был создан при подключениии базы данных. И на его основе создадим отдельную функцию записи строки в таблицу "url_php" под названием "rihgtUrlPhp".
Полученный в результате этого код функции rihgtUrlPhp() примет следующий вид.
-
-
//----Функция записи строки в таблицу "url_php"-------------
-
function rihgtUrlPhp($title, $file, $url) {
-
global $mysqli;
-
if (!$mysqli->query("INSERT INTO `url_php` (`title`, `file`, `url`) VALUES ('$title', '$file', '$url')")) {
-
die('Запись не выполнена: Код ошибки: '.$mysqli->errno.' - '.$mysqli->error);
-
}
-
}
-
?>
Рис.9
Здесь необходимо отметить, что переменные $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');
-
for ($i = 0; $i <= 4; $i++) {
-
$title = $title_array[$i];
-
$file = $file_array[$i];
-
$url = $url_array[$i];
-
rihgtUrlPhp($title, $file, $url);
-
}
-
echo 'Запись данных в таблицу "url_php" выполнена успешно';
-
?>
Рис.10
А теперь, если снова обновить главную страницу, то при правильном составлении кода в таблицу "url_php" должно быть добавлено к уже существующим пяти строкам еще пять точно таких же строк.

Рис.11
Таким образом, мы получили требуемый результат - создали новые записи в таблице "url_php" в соответствии с заданными исходными данными, используя для этого выделенную функцию, размещенную в отдельном файле "functions.php".
На этом мы закончим рассмотрение различных вариантов записи данных в таблицы MySQL. А, в следующей статье перейдем к другому вопросу работы с БД - теперь уже, к получению данных из таблиц MySQL.
Исходные файлы сайта
Исходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:
- Файлы каталога www
- Таблицы базы данных MySQL
При этом фрагменты PHP-кодов, выполняющие запись данных в таблицу "url_php" по умолчанию закомментированы (каждый по отдельности). Для проверки работы данных скриптов следует в них сделать соответствующие изменения (раскомментировать).
Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.
Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.
Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.
С уважением,