Verification: a143cc29221c9be0

Mysql вставить в базу php

Содержание

Что такое реляционная база данных

Реляционная база данных – это база данных основанная на реляционной модели (от англ. relationship — отношение, связь) выражаясь по другому, это некий набор данных с определёнными связями между ними. Обычно такие базы организованны в виде таблиц. В отдельных таблицах хранится сгруппированная по определённому смыслу информация о какой-либо сущности, например данные о покупателях (сущность — покупатель) или данные о товарах (сущность — товар) и т.д.  Каждый столбец таблицы отвечает за хранение одного свойства сущности, внутри ячейки хранится значение свойства сущности, например столбец — цена, значение — 1000.

Отношения между таблицами в БД

Преимущественно отдельные столбцы имеют строго определённый тип данных (числовой, логический, текстовый, дату и время и т.д.). Каждая стока таблицы это набор значений свойств относящихся к определённой сущности (напр. определённому пользователю может соответствовать строка где хранит его имя, фамилия, телефон, email, возраст и пол.). Каждая строка в таблице должна иметь уникальный идентификатор, а так же так называемый «первичный ключ» (часто первичный ключ = уникальный идентификатор). При помощи первичного ключа, несколько таблиц базы данных могут быть связаны, например в таблице users — хранятся пользователи, а в таблице orders — заказы пользователей сделанные в интернет-магазине. По первичному ключу user_id  (идентификатор пользователя) мы можем узнать что этот пользователь заказал, т.е. получить данные из таблицы orders.

Для работы с реляционными базами данных существует множество инструментов, они позволяют «вытаскивать» из БД различные наборы данных, даже более сложные чем в приведённом примере, при этом, структура таблиц не требует реорганизации.

СУБД MySQL

Что же такое MySQL? Это надежная. быстрая и универсальная система управления базами данных (СУБД), пожалуй  самая популярная в мире (в 2019 году 39% разработчиков использовали MySQL в своих проектах). Несмотря на более слабый функционал в сравнении с PostgreSQL, данная СУБД прекрасно масштабируется и отлично подходит для большинства проектов.

MySQL СУБД

MySQL — идеальный выбор для разработке веб-приложений. Данная СУБД входит в стандартный набор: Linux, Apache HTTP Server, MySQL и PHP (LAMP — набор программ с открытым исходным кодом). Так же не основе MySQL работает большинство популярных CMS ( Content Management System — система управление содержимым), таких как WordPress, OpenCart, 1С Битрикс и т.д.

К преимуществам этой СУБД можно отнести:

  • Простота: Mysql легко установить на любую платформу (Linux, Windows, MacOS), под эту СУБД написано множество настольных приложений позволяющих работать с базой в визуальном режиме (очень удобно особенно для новичков), к подобным системам относятся Workbench, Navicat, PHPMyAdmin и другие.
  • Много функций: MySQL поддерживает весь функционал реализованный на  языке SQL.
  • Безопасность: в СУБД MySQL встроено много функций безопасности, например Access Control Lists и поддержка SSH-зашифрованных соединений.
  • Масштабируемость: MySQL достаточно легко и не дорого масштабируется, что позволяет разрабатывать на ней довольно крупные и высоко-нагруженные проекты.

В большинстве языков программирования встроена поддержка СУБД MySQL, PHP так же не стал исключением.

PHP PDO

PHP PDO
 PDO — это специализированный класс реализующий интерфейс доступа к базе данных. Его отличает универсальность, т.к. вам без разницы какая база данных будет использована.

Подключение к БД

Для подключения к БД необходимо создать экземпляр класса PDO и передать в него параметры подключения:


/* Подключение к базе данных MySQL с помощью PDO */
$dsn = 'mysql:dbname=testdb;host=localhost';
$user = 'root';
$password = '123456';

//Чтобы перехватить ошибки подключения используем исключения try {...} catch () {...}
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
	//В случае ошибки выводим сообщения из перехваченного исключения
    echo 'Подключение к БД не удалось: ' . $e->getMessage();
}

Конструктор PDO так же поддерживает и четвёртый параметр options — это массив ключ=>значение специфичных для драйвера (например MySQL или PostgreSQL) настроек подключения. Например сразу после подключения можно выполнить MySQL запрос указав это в параметре options:


//Чтобы перехватить ошибки подключения используем исключения try {...} catch () {...}
try {
    $dbh = new PDO(
		$dsn, 
		$user, 
		$password, 
		[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"] //Команда которую необходимо выполнить сразу после подключения к серверу
	);
} catch (PDOException $e) {
	//В случае ошибки выводим сообщения из перехваченного исключения
    echo 'Подключение к БД не удалось: ' . $e->getMessage();
}

Полный перечень параметров доступных в options вы найдёте в документации.

Базовый набор операций (CRUD)

Большинство веб-приложений работающих с базой данных, так или иначе реализуют базовый набор операций, а именно Create — создание, Read — чтение, Update — обновление и Delete — удаление (CRUD). Давайте рассмотрим как этот набор операций сделать в PDO.

Создание

Для теста, давайте создадим таблицу с пользователями сайта и заполним её данными. Таблица будет называться просто users и иметь 4 поля:

  1. id — автоинкрементный идентификатор записи
  2. name — имя пользователя
  3. email — адрес электронной почты
  4. phone — контактный телефон

try {
    //Соединяемся с базой данных
    $dbh = new PDO('mysql:dbname=test_db;host=localhost', $user, $password);

    //запрос на создание таблицы
    $sqlCreateTable = 'CREATE TABLE `users` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL, `phone` VARCHAR(255) NOT NULL, PRIMARY KEY (`id`)) ';
    $dbh->exec($sqlCreateTable);
    echo 'Создана таблица users';

} catch(PDOException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}

Здесь мы используем метод exec() он запускает запрос на выполнение возвращая количество затронутых строк. Метод не предназначен для выборки данных из таблицы. Если всё сделано верно у вас будет создана таблица пользователей. Давайте заполним её данными.


/*Данные пользователей, в реальном проектк они могут
 быть получены из JSON, файла импорта или из формы регистрации */
$usersData = [
    [
        'name'=>'Иван Иванов',
        'email'=>'ivan@mail.ru',
        'phone'=>'+79001234567'],
    [
        'name'=>'Пётр Петров',
        'email'=>'petrov@yandex.ru',
        'phone'=>'+79281534874'],
    [
        'name'=>'Олег Сидоров',
        'email'=>'sidor@gmail.com',
        'phone'=>'+79508975248'
    ],
];

try {
    //Соединяемся с базой данных
    $dbh = new PDO('mysql:dbname=test_db;host=localhost', $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Подготовка запроса, обратите внимание что ключи в запросе совпадают с ключами массив отдельного пользователя
    $data = $dbh->prepare('INSERT INTO users (name, email, phone) VALUES(:name, :email, :phone)');

    //Перебираем массив пользователей
    foreach ($usersData as $user) {
        //Подставляем данные пользователей в запрос
        $data->execute($user);
    }

} catch(PDOException $e) {
    echo 'Ошибка: ' . $e->getMessage();
}

Если всё сделано верно, вы получите заполненную таблицу users:
Заполненная таблица users

Чтение

Прочитать записи в таблице БД можно несколькими способами, при помощи метода query и execute , давайте разберём оба:

Чтение таблицы при помощи метода query


$user = 'root';
$password = 'Ваш пароль';

//Чтобы перехватить ошибки подключения используем исключения try {...} catch () {...}
try {
    $dbh = new PDO('mysql:dbname=test_db;host=localhost', $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Выборка всех записей
    $users = $dbh->query('SELECT * FROM `users`');

    echo '
    '; foreach ($users as $user){ echo '
  • id: ' . $user['id'] . ' - name: ' . $user['name'] . ' - phone: ' . $user['phone'] . ' - email: '. $user['email'] .'
  • '; } echo '
'; } catch (PDOException $e) { //В случае ошибки выводим сообщения из перехваченного исключения echo 'Ошибка: ' . $e->getMessage(); }

В результате на экране вы увидите такую картину:
Результат чтения таблицы users
Обратите внимание на следующее:


$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

Данные параметры устанавливают расширенный режим вывода ошибок и исключение PDO.

Чтение таблицы при помощи метода execute

Давайте выберем из БД одного пользователя по конкретному email адресу.


try {
    $dbh = new PDO('mysql:dbname=test_db;host=localhost', $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Вывод пользователя с email адресом ivan@mail.ru

    //Подготовка запроса
    $data = $dbh->prepare('SELECT * FROM `users` WHERE `email` = :user_email');
    // Выполнение с подстановкой параметра в запрос
    $data->execute(['user_email'=>'ivan@mail.ru']);

    //Получаем результат
    $users = $data->fetchAll();

    echo '
    '; foreach ($users as $user){ echo '
  • id: ' . $user['id'] . ' - name: ' . $user['name'] . ' - phone: ' . $user['phone'] . ' - email: '. $user['email'] .'
  • '; } echo '
'; } catch (PDOException $e) { //В случае ошибки выводим сообщения из перехваченного исключения echo 'Ошибка: ' . $e->getMessage(); }

В данном примере используется метод prepare т.е. подготовка запроса. Это позволят почти с 100% гарантией избежать SQL инъекций т.к. подставляемый параметры email не встраивается в зарос напрямую, в запросе есть лишь метка :email куда через метод execute будет подставлена переданная через ассоциативный массив переменная.

В результате выполнения запроса, получаем одну запись из таблицы users:

Чтение таблицы методом execute

Редактирование

Давайте теперь изменим контактный телефон для пользователя с id равным 2 и сразу посмотрим на результат (выведем на экран список всех пользователей).


try {
    //Соединяемся с базой данных
    $dbh = new PDO('mysql:dbname=test_db;host=localhost', $user, $password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    //Подготовка запроса
    $data = $dbh->prepare('UPDATE  users SET phone = :phone WHERE id = :id');

    //Подстановка параметров
    $data->execute([
        'phone'=>'+7 900 000 00 00',
        'id' => 2
    ]);

    //Выведем на экран сколько строк затронул наш запрос
    echo 'Обновлено строк таблицы: ' . $data->rowCount();

    //И сразу посмотрим на результат, выведем всех пользователей
    $users = $dbh->query('SELECT * FROM `users`');

    echo '
    '; foreach ($users as $user){ echo '
  • id: ' . $user['id'] . ' - name: ' . $user['name'] . ' - phone: ' . $user['phone'] . ' - email: '. $user['email'] .'
  • '; } echo '
'; } catch(PDOException $e) { echo 'Ошибка: ' . $e->getMessage(); }

Как видите, запись обновилась:
Обновление записи в БД

Отлично, осталось понять как удалять запись. Давайте удалим того же пользователя, этот Пётр Петров мне надоел =)

Предварительные требования

Для целей этого краткого руководства понадобится:

  • Учетная запись Azure с активной подпиской. Создайте учетную запись бесплатно.

  • Создание отдельного сервера Базы данных Azure для MySQL с помощью портала Azure
    или с помощью Azure CLI, если он еще не создан.

  • Выполнить ОДНО из действий (в зависимости от того, пользуетесь вы общим или частным доступом), чтобы настроить возможность подключения.

    Действие Метод подключения Практическое руководство
    Настройка правил брандмауэра Общие Портал
    CLI
    Настройка конечной точки службы Общие Портал
    CLI
    Настройка приватного канала Private Портал
    CLI
  • Создание базы данных и пользователя без прав администратора.

  • Установка последней версии PHP для вашей операционной системы:

    • PHP в macOS;
    • PHP в Linux;
    • PHP в Windows

Примечание

При работе с этим кратким руководством мы используем библиотеку MySQLi для управления подключением и выполнения запросов к серверу.

Получение сведений о подключении

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

  1. Войдите на портал Azure.

  2. Перейдите на страницу Базы данных Azure для MySQL. Найдите и выберите База данных Azure для MySQL. Поиск Базы данных Azure для MySQL

  3. Выберите свой сервер MySQL (например, mydemoserver).

  4. На странице Обзор скопируйте полное имя сервера рядом с полем Имя сервера и имя администратора рядом с полем Имя для входа администратора сервера. Чтобы скопировать имя сервера или имя узла, наведите на него указатель мыши и щелкните значок копирования.

Важно!

  • Если вы забыли свой пароль, его можно сбросить.
  • Замените значения параметров host, username, password и db_name своими значениями**.

Шаг 1. Подключение к серверу

Протокол SSL включен по умолчанию. Для подключения из локальной среды может потребоваться скачать SSL-сертификат DigiCertGlobalRootG2. Этот код вызывает:

  • mysqli_init для инициализации MySQLi.
  • mysqli_ssl_set для указания пути SSL-сертификата. Это необходимо для локальной среды, но не требуется для веб-приложения Службы приложений или виртуальных машин Azure.
  • mysqli_real_connect для подключения к MySQL.
  • mysqli_close для закрытия подключения.
$host = 'mydemoserver.mysql.database.azure.com';
$username = 'myadmin@mydemoserver';
$password = 'your_password';
$db_name = 'your_database';

//Initializes MySQLi
$conn = mysqli_init();

mysqli_ssl_set($conn,NULL,NULL, "/var/www/html/DigiCertGlobalRootG2.crt.pem", NULL, NULL);

// Establish the connection
mysqli_real_connect($conn, 'mydemoserver.mysql.database.azure.com', 'myadmin@mydemoserver', 'yourpassword', 'quickstartdb', 3306, NULL, MYSQLI_CLIENT_SSL);

//If connection failed, show the error
if (mysqli_connect_errno())
{
    die('Failed to connect to MySQL: '.mysqli_connect_error());
}

Возникли проблемы? Сообщите нам об этом

Шаг 2. Создание таблицы

Для подключения используйте следующий код. Этот код вызывает:

  • mysqli_query для запуска запроса.
// Run the create table query
if (mysqli_query($conn, '
CREATE TABLE Products (
`Id` INT NOT NULL AUTO_INCREMENT ,
`ProductName` VARCHAR(200) NOT NULL ,
`Color` VARCHAR(50) NOT NULL ,
`Price` DOUBLE NOT NULL ,
PRIMARY KEY (`Id`)
);
')) {
printf("Table created\n");
}

Шаг 3. Добавление данных

Используйте указанный ниже код с инструкцией SQL INSERT для вставки данных. Этот код использует методы:

  • mysqli_prepare для создания подготовленной инструкции INSERT.
  • mysqli_stmt_bind_param для привязки параметров для каждого вставленного значения столбца.
  • mysqli_stmt_execute.
  • mysqli_stmt_close для закрытия инструкции с помощью метода.
//Create an Insert prepared statement and run it
$product_name = 'BrandNewProduct';
$product_color = 'Blue';
$product_price = 15.5;
if ($stmt = mysqli_prepare($conn, "INSERT INTO Products (ProductName, Color, Price) VALUES (?, ?, ?)"))
{
    mysqli_stmt_bind_param($stmt, 'ssd', $product_name, $product_color, $product_price);
    mysqli_stmt_execute($stmt);
    printf("Insert: Affected %d rows\n", mysqli_stmt_affected_rows($stmt));
    mysqli_stmt_close($stmt);
}

Шаг 4. Чтение данных

Используйте указанный ниже код с инструкцией SQL SELECT для чтения данных. Этот код использует методы:

  • mysqli_query для выполнения запроса SELECT.
  • mysqli_fetch_assoc для получения результирующих строк.
//Run the Select query
printf("Reading data from table: \n");
$res = mysqli_query($conn, 'SELECT * FROM Products');
while ($row = mysqli_fetch_assoc($res))
 {
    var_dump($row);
 }

Шаг 5. Удаление данных

Используйте указанный ниже код с инструкцией SQL DELETE для удаления строк. Этот код использует методы:

  • mysqli_prepare для создания подготовленной инструкции DELETE.
  • mysqli_stmt_bind_param для привязки параметров.
  • mysqli_stmt_execute для создания подготовленной инструкции DELETE.
  • mysqli_stmt_close для закрытия инструкции.
//Run the Delete statement
$product_name = 'BrandNewProduct';
if ($stmt = mysqli_prepare($conn, "DELETE FROM Products WHERE ProductName = ?")) {
mysqli_stmt_bind_param($stmt, 's', $product_name);
mysqli_stmt_execute($stmt);
printf("Delete: Affected %d rows\n", mysqli_stmt_affected_rows($stmt));
mysqli_stmt_close($stmt);
}

Очистка ресурсов

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

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Этапы подключения к базе данных MySQL

  1. Код PHP начинается с и заканчивается ?> Так компьютеру будет понятно, где начало и где конец программы.
  2. В самом начале кода удобно указать способ отображения ошибок — если что-то пойдет не так, вы сможете быстро понять код ошибки. В языке программирования PHP для этого используются следующие команды:

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL); 
  3. Соединение с базой данных MySQL: создаем переменную, например, $connect, в которой через коннектор вносим доступы к нашей базе данных (имя, пароль и т.п.). Эта база данных MySQL должна уже существовать и «крутиться» либо на сервере, либо на локалке. Про установку и создание своей базы данных у нас будет отдельный материал. Подключаемся:

    $connect = mysqli_connect('localhost', 'database', 'password', 'user');
  4. Создаем запрос к базе данных — какие данные мы хотим получить: для этого делаем новую переменную, например, $query1, которой присваиваем значение запроса на языке, понятном для базы MySQL — выбери из где . Запрос выглядит так:

    $query1 = "SELECT Name FROM igroki WHERE N='7'";
  5. Подготовка в возвращение результатов запроса для чтения: создаем новую переменную, например, $result— которая получит результат запроса. Используется конструкция [подключение к БД] -> query([запрос к БД]). В нашем примере возвращение результатов выглядит так:

    $result = $connect->query($query1);
  6. Затем вы должны получать по одной записи из набора результатов возвращенного запроса (по сути перебором). В нашем примере — это будет только 1 запись, потому что вы получаете id = 7. Обычно вы будете использовать mysqli_fetch_array ($ result), чтобы вернуть массив данных, или вы можете использовать mysqli_fetch_object ($ result), чтобы вернуть объект данных. В нашем примере мы создаем новую переменную, например, $record и фетчим полученный массив:

    $record = mysqli_fetch_array($result);
  7. Напечатать имя седьмого игрока: для печати в PHP используется оператор echo, где в кавычках можно написать текст для печати, и через точку объединить текст с переменной — так как возвращенный массив имеет несколько «колонок», а нам нужно вывести именно имя, то указываем в скобках к переменной $record именно 'Name':

    echo 'Name of 7th player: ' . $record['Name'];
  8. Отключение от базы данных:

    $connect -> close();

*Если у вас есть несколько записей в вашей таблице и вы хотите их вывести, вы можете использовать цикл while для перебора данных следующим образом:

$query2 = "SELECT Name FROM igroki";
$result2 = $connect->query($query2);

while ($record2 = mysqli_fetch_array($result2))
{
    echo 'Name: ' . $record2['Name'] . '
';

}

Подключения к базе данных MySQL — простой пример запроса на PHP


ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);

$query1 = «SELECT Name FROM igroki WHERE N=’7′»;

$result = $connect->query($query1);

$record = mysqli_fetch_array($result);

echo ‘Name of 7th player: ‘ . $record[‘Name’];

echo «





»;  //Это разделитель html

// Перебор нескольких значений:

echo «All players:

»;
$query2 = «SELECT Name FROM igroki»;

$result2 = $connect->query($query2);
while ($record2 = mysqli_fetch_array($result2)) {
echo ‘Name: ‘ . $record2[‘Name’] . ‘
’;

}

$connect -> close();
?>

Создание кнопки на сайте для получения значений из базы данных MySQL

К тому коду, который вам уже известен — базовый запрос к БД — осталось добавить html-код кнопки через тег

(позволяет создавать на сайте интерактивные элементы и отправлять данные на сервер).

Чтобы внутри формы появилась кнопка вводим action — можно пустой (action=''), чтобы при нажатии загружалась эта же программа, либо можно в кавычках указать ссылку на другой файл с кодом, который запустится при нажатии кнопки (например, action='submit.php').

Важно присвоить форме select name — любое имя, на которое затем можно ссылаться в программе).

На сайте кнопку, списки, выпадающие меню можно сделать с помощью форм, которые могут быть типа POST (method=’POST’) или GET (method=’GET’). Если делать форму POST, то пользователь не будет видеть в строке браузера текст, соответствующий выбранным опциям. Если сделать форму GET, то строка браузера после выбора варианта покажет значение (похожим образом работает поисковик, если сделать запрос, то в строку браузера добавляется информация о запросе).ᅠ


if (isset($_POST[‘submit’]))
{
echo » 



«;
}

ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);
$query1 = «SELECT Name FROM igroki WHERE N=’7′»;
$result = $connect->query($query1);
$record = mysqli_fetch_array($result);

if (isset($_POST[‘submit’]))
{
echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

$connect -> close();
?>

Создание формы (выпадающий список) с кнопкой на сайте

Научившись обращаться к базе данных и делать простые кнопки, пришло время сделать форму на сайте в виде выпадающего списка (dropdown menu) и связанную кнопку, которую пользователь может нажать, чтобы выбрать значение, отправить запрос в БД и получить результаты на экране монитора.

На сайте выпадающее меню создается с помощью форм, которые могут быть типа POST (method=’POST’) или GET (method=’GET’). 

Чтобы создать выпадающее меню с кнопкой, используется html-тег формы

с выбором вариантов через теги:

(можно указать action='', чтобы при нажатии загружалась эта же программа, либо можно в кавычках указать ссылку на другой файл с кодом, который запустится при нажатии кнопки; важно присвоить select name — любое имя, на которое затем можно ссылаться в программе);

(option value — это значение, которое будет записано в переменную при выборе этого пункта, а Seven и Eight  — это то, что показывается пользователю на сайте в выпадающем меню);

внутри формы добавляем кнопку через html-тег .

Пример кода для выпадающего меню с кнопкой методом POST




Создав форму с кнопкой, нам теперь надо уметь получать пользовательский выбор. Если пользователь нажмет кнопку выбора варианта, то программа должна понимать это. Давайте научим компьютер общаться с пользователем. Для этого создам условие с проверкой нажатия кнопки — если кнопка была нажата (isset в PHP проверяет, есть ли у переменной значение, отличное от null), то сделай запрос к базе данных и напечатай то, что выбрал пользователь.

Этот код очень похож на то, что мы уже писали в начале этого поста, создавая простой запрос к БД. 

Получение выбора пользователя после нажатия кнопки на сайте — напечатать одно значение из базы данных (имя седьмого игрока)

if (isset($_POST[‘submit’]))
{
    $number = $_POST[‘PlayerID’];
    $query = «SELECT Name FROM igroki WHERE N=’$number'»;
    $result = $connect->query($query);
    $record = mysqli_fetch_array($result);
    echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

Cоздание формы (выпадающий список) с кнопкой, отправляющей запрос к базе данных MySQL на html + PHP с выводом результатов на сайте





ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);

if (isset($_POST[‘submit’]))
{
    $number = $_POST[‘PlayerID’];
    $query = «SELECT Name FROM igroki WHERE N=’$number'»;
    $result = $connect->query($query);
    $record = mysqli_fetch_array($result);
    echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

$connect -> close();
?>

XAMPP phpMyAdmin Что это такое?

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

Создать базу данных на XAMPP phpMyAdmin

phpMyAdmin поддерживает широкий спектр операций MySQL, что делает работу с базой данных легкой и простой. Более того, интерактивный пользовательский интерфейс phpMyAdmin помогает довольно легко управлять запросами. Чтобы создать базу данных MySQL XAMPP, вам необходимо сначала запустить XAMPP.

Now navigate to http://localhost/phpmyadmin

И щелкните вкладку База данных. Теперь вы должны увидеть параметр «Создать базу данных» и поле ввода для ввода имени базы данных. Напишите имя базы данных и нажмите кнопку «Создать». Через некоторое время вы увидите сообщение об успешном выполнении.

Из списка таблиц вы можете просмотреть свою базу данных. Вы можете использовать эту базу данных где угодно с настройками по умолчанию. По умолчанию HostName – localhost, пользователь MySQL – root и не имеет пароля.

Создание таблиц с помощью phpMyAdmin XAMPP

Таблицы играют жизненно важную роль в хранении информации (динамическое содержимое). В XAMPP MySQL храните информацию в таблицах. Вы можете легко добавлять таблицы в MySQL, используя интуитивно понятный пользовательский интерфейс phpMyAdmin. В phpMyAdmin перейдите на вкладку «Структура». Под списком таблиц внизу страницы нажмите мастер «Создать новую таблицу в базе данных», чтобы начать работу. Сначала добавьте имя таблицы и общее количество полей и нажмите кнопку «Перейти».

XAMPP phpMyAdmin: как создать базу данных и таблицы

Таким образом вы попадете в пошаговый мастер, в котором вам необходимо заполнить необходимые поля. Прежде всего, назовите все поля и выберите соответствующий тип для каждого поля. Однако, чтобы выбрать тип, используйте раскрывающееся меню «Тип» и введите значение длины каждого поля. Затем присвойте каждому полю «Атрибут». В раскрывающемся меню «Null» выберите опцию NULL и определите, является ли указанное поле первичным ключом или нет. И, наконец, выберите тип таблицы и метод сопоставления и нажмите кнопку «Сохранить», чтобы завершить процесс создания таблицы.

Установите пароль на phpMyAdmin на XAMPP

Когда мы устанавливаем сервер XAMPP на локальный компьютер, по умолчанию используется имя пользователя root, а пароль остается пустым. Поскольку это локальный сервер, разработчики не устанавливают пароль. Однако вы можете установить или изменить пароль на phpMyAdmin на XAMPP. Если вы хотите установить пароль, вы можете выполнить следующие шаги.

  • Запустите сервер XAMPP, нажав кнопку «Пуск» параллельно с сервером MySQL и Apache, как показано ниже.
  • Параллельно с MySQL в столбце “Действия” нажмите кнопку “Администратор”. И это откроет страницу, URL-адрес которой будет localhost / phpmyadmin. Однако вы можете напрямую открыть эту страницу, просто введя этот URL-адрес в браузере.
  • На этой странице нажмите на опцию «Учетные записи пользователей» вверху страницы.
  • Теперь нажмите «Изменить привилегии» в разделе «Действия» для имени пользователя «root» и имени хоста «localhost».
  • Теперь выберите третью вкладку «Изменить пароль» и введите свой пароль в предоставленное поле, введите пароль еще раз, чтобы подтвердить его, а затем, наконец, нажмите кнопку «Перейти», чтобы завершить процесс.

XAMPP phpMyAdmin: как создать базу данных и таблицы

Вот как вы можете установить пароль для phpMyAdmin XAMPP !!

Импорт / экспорт базы данных на XAMPP phpMyAdmin

Для управления базой данных MySQL phpMyAdmin предоставляет вам эффективную платформу. Вы можете обрабатывать данные откуда угодно, используя phpMyAdmin. Более того, возможность импорта и экспорта базы данных дает вам наилучшие шансы на восстановление после любой внезапной или неизбежной потери данных. Точно так же перенос данных с одного сервера на другой может выполняться безупречно. Это веб-интерфейс, который позволяет восстанавливать данные из любого места.

Импортировать базу данных на XAMPP phpMyAdmin

Однако данные легко импортировать или экспортировать, и следующие шаги могут помочь вам в этом. Итак, чтобы импортировать базу данных с помощью phpMyAdmin XAMPP, выполните следующие шаги.

  • Откройте базу данных в phpMyAdmin.
  • Щелкните Базы данных в верхнем меню.
  • В раскрывающемся меню выберите имя базы данных, которую вы хотите импортировать.
  • Щелкните вкладку Импорт.
  • Просмотрите свой файл .sql, щелкнув параметр «Выбрать файл», который вы хотите импортировать. Затем нажмите кнопку «Перейти» внизу.
  • Готово !!

XAMPP phpMyAdmin: как создать базу данных и таблицы

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

Экспорт базы данных на XAMPP phpMyAdmin

Чтобы экспортировать базу данных MySQL через phpMyAdmin XAMPP, выполните следующий шаг.

  • Чтобы начать процесс экспорта, войдите в cPanel и откройте интерфейс phpMyAdmin.
  • На левой панели phpMyAdmin выберите базу данных, которую вы хотите экспортировать.
  • Выберите вкладку «Экспорт» вверху.
  • Теперь вы увидите два варианта: «Быстрый» и «Пользовательский». Вы можете выбрать «Быстрый», если хотите использовать параметр по умолчанию, или выбрать «Пользовательский», если хотите выбрать определенные таблицы и тип представления экспортируемого файла в дополнение ко многим другим параметрам.

Примечание. Старая версия phpMyAdmin не поддерживает Quick. Так что для этого вам придется использовать другой метод.

  • Теперь выделите формат, в который вы хотите экспортировать свою базу данных. Щелкните раскрывающееся меню и откажитесь от формата из данного списка.
  • Подтвердите свой выбор, нажав кнопку «Перейти».
  • Теперь вам будет предложено открыть или сохранить выбранный файл. Вы можете выбрать «Сохранить файл» и сохранить его в желаемом месте.

Поздравляю !! Вы успешно экспортировали файл.

XAMPP phpMyAdmin: как создать базу данных и таблицы

Этапы подключения к базе данных MySQL

  1. Код PHP начинается с и заканчивается ?> Так компьютеру будет понятно, где начало и где конец программы.
  2. В самом начале кода удобно указать способ отображения ошибок — если что-то пойдет не так, вы сможете быстро понять код ошибки. В языке программирования PHP для этого используются следующие команды:

    ini_set('display_errors', 1);
    ini_set('display_startup_errors', 1);
    error_reporting(E_ALL); 
  3. Соединение с базой данных MySQL: создаем переменную, например, $connect, в которой через коннектор вносим доступы к нашей базе данных (имя, пароль и т.п.). Эта база данных MySQL должна уже существовать и «крутиться» либо на сервере, либо на локалке. Про установку и создание своей базы данных у нас будет отдельный материал. Подключаемся:

    $connect = mysqli_connect('localhost', 'database', 'password', 'user');
  4. Создаем запрос к базе данных — какие данные мы хотим получить: для этого делаем новую переменную, например, $query1, которой присваиваем значение запроса на языке, понятном для базы MySQL — выбери из где . Запрос выглядит так:

    $query1 = "SELECT Name FROM igroki WHERE N='7'";
  5. Подготовка в возвращение результатов запроса для чтения: создаем новую переменную, например, $result— которая получит результат запроса. Используется конструкция [подключение к БД] -> query([запрос к БД]). В нашем примере возвращение результатов выглядит так:

    $result = $connect->query($query1);
  6. Затем вы должны получать по одной записи из набора результатов возвращенного запроса (по сути перебором). В нашем примере — это будет только 1 запись, потому что вы получаете id = 7. Обычно вы будете использовать mysqli_fetch_array ($ result), чтобы вернуть массив данных, или вы можете использовать mysqli_fetch_object ($ result), чтобы вернуть объект данных. В нашем примере мы создаем новую переменную, например, $record и фетчим полученный массив:

    $record = mysqli_fetch_array($result);
  7. Напечатать имя седьмого игрока: для печати в PHP используется оператор echo, где в кавычках можно написать текст для печати, и через точку объединить текст с переменной — так как возвращенный массив имеет несколько «колонок», а нам нужно вывести именно имя, то указываем в скобках к переменной $record именно 'Name':

    echo 'Name of 7th player: ' . $record['Name'];
  8. Отключение от базы данных:

    $connect -> close();

*Если у вас есть несколько записей в вашей таблице и вы хотите их вывести, вы можете использовать цикл while для перебора данных следующим образом:

$query2 = "SELECT Name FROM igroki";
$result2 = $connect->query($query2);

while ($record2 = mysqli_fetch_array($result2))
{
    echo 'Name: ' . $record2['Name'] . '
';

}

Подключения к базе данных MySQL — простой пример запроса на PHP


ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);

$query1 = «SELECT Name FROM igroki WHERE N=’7′»;

$result = $connect->query($query1);

$record = mysqli_fetch_array($result);

echo ‘Name of 7th player: ‘ . $record[‘Name’];

echo «





»;  //Это разделитель html

// Перебор нескольких значений:

echo «All players:

»;
$query2 = «SELECT Name FROM igroki»;

$result2 = $connect->query($query2);
while ($record2 = mysqli_fetch_array($result2)) {
echo ‘Name: ‘ . $record2[‘Name’] . ‘
’;

}

$connect -> close();
?>

Создание кнопки на сайте для получения значений из базы данных MySQL

К тому коду, который вам уже известен — базовый запрос к БД — осталось добавить html-код кнопки через тег

(позволяет создавать на сайте интерактивные элементы и отправлять данные на сервер).

Чтобы внутри формы появилась кнопка вводим action — можно пустой (action=''), чтобы при нажатии загружалась эта же программа, либо можно в кавычках указать ссылку на другой файл с кодом, который запустится при нажатии кнопки (например, action='submit.php').

Важно присвоить форме select name — любое имя, на которое затем можно ссылаться в программе).

На сайте кнопку, списки, выпадающие меню можно сделать с помощью форм, которые могут быть типа POST (method=’POST’) или GET (method=’GET’). Если делать форму POST, то пользователь не будет видеть в строке браузера текст, соответствующий выбранным опциям. Если сделать форму GET, то строка браузера после выбора варианта покажет значение (похожим образом работает поисковик, если сделать запрос, то в строку браузера добавляется информация о запросе).ᅠ


if (isset($_POST[‘submit’]))
{
echo » 



«;
}

ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);
$query1 = «SELECT Name FROM igroki WHERE N=’7′»;
$result = $connect->query($query1);
$record = mysqli_fetch_array($result);

if (isset($_POST[‘submit’]))
{
echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

$connect -> close();
?>

Создание формы (выпадающий список) с кнопкой на сайте

Научившись обращаться к базе данных и делать простые кнопки, пришло время сделать форму на сайте в виде выпадающего списка (dropdown menu) и связанную кнопку, которую пользователь может нажать, чтобы выбрать значение, отправить запрос в БД и получить результаты на экране монитора.

На сайте выпадающее меню создается с помощью форм, которые могут быть типа POST (method=’POST’) или GET (method=’GET’). 

Чтобы создать выпадающее меню с кнопкой, используется html-тег формы

с выбором вариантов через теги:

(можно указать action='', чтобы при нажатии загружалась эта же программа, либо можно в кавычках указать ссылку на другой файл с кодом, который запустится при нажатии кнопки; важно присвоить select name — любое имя, на которое затем можно ссылаться в программе);

(option value — это значение, которое будет записано в переменную при выборе этого пункта, а Seven и Eight  — это то, что показывается пользователю на сайте в выпадающем меню);

внутри формы добавляем кнопку через html-тег .

Пример кода для выпадающего меню с кнопкой методом POST




Создав форму с кнопкой, нам теперь надо уметь получать пользовательский выбор. Если пользователь нажмет кнопку выбора варианта, то программа должна понимать это. Давайте научим компьютер общаться с пользователем. Для этого создам условие с проверкой нажатия кнопки — если кнопка была нажата (isset в PHP проверяет, есть ли у переменной значение, отличное от null), то сделай запрос к базе данных и напечатай то, что выбрал пользователь.

Этот код очень похож на то, что мы уже писали в начале этого поста, создавая простой запрос к БД. 

Получение выбора пользователя после нажатия кнопки на сайте — напечатать одно значение из базы данных (имя седьмого игрока)

if (isset($_POST[‘submit’]))
{
    $number = $_POST[‘PlayerID’];
    $query = «SELECT Name FROM igroki WHERE N=’$number'»;
    $result = $connect->query($query);
    $record = mysqli_fetch_array($result);
    echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

Cоздание формы (выпадающий список) с кнопкой, отправляющей запрос к базе данных MySQL на html + PHP с выводом результатов на сайте





ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

$connect = mysqli_connect(‘localhost’, ‘database’, ‘password’, ‘user’);

if (isset($_POST[‘submit’]))
{
    $number = $_POST[‘PlayerID’];
    $query = «SELECT Name FROM igroki WHERE N=’$number'»;
    $result = $connect->query($query);
    $record = mysqli_fetch_array($result);
    echo ‘Name of 7th player: ‘ . $record[‘Name’];
}

$connect -> close();
?>

Создание Таблицы (По необходимости)

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

phpMyAdmin в Панели Управления Хостингом Hostinger

После входа на страницу phpMyAdmin вы увидите подобную картину:

Меню phpMyAdmin

Давайте создадим таблицу с названием Students для нашей базы данных u104357129_name. Создать новую таблицу можно, нажав на кнопку Create Table. После этого вы увидите новую страницу со всеми необходимыми полями для ввода данных.

Окно с Полями для Создания Таблицы MySQL

Поскольку создание таблицы не основная тема этого руководства, мы не будем углубляться в подробности. Если вам нужно больше информации о структуре таблицы/базы данных и о том, какие настройки вы можете использовать для каждого столбца, рекомендуем обратиться к официальной документации phpMyAdmin (англ.).

Здесь приведём лишь несколько простых пояснение столбцов, которые мы будем использовать:

  • Name — это имя столбца. Будет отображено в самом верху вашей таблицы.
  • Type — тип ваших данных. Вы можете указать любой тип: int, varchar, string и многие другие. Например, мы указали varchar, поскольку нам нужно ввести строку переменной длины, содержащую буквы, не цифры.
  • Length/Values — используется для задания максимальной длины вашей записи в столбце.
  • Index — для нашего поля “ID” мы используем индекс “Primary”. Когда создаётся таблица, рекомендуется иметь один столбец ID. Он используется для индексации записей в таблице, когда настраиваются взаимосвязи между таблицами. Здесь также можно отметить “A_I”, что означает Auto Increment. Эта настройки будет автоматически увеличивать индекс (1,2,3,4…).

Нажмите Save, чтобы сохранить вашу таблицу.

Создание PHP Кода и Добавление Записи в Таблицу MySQL (Insert)

Есть два способа вставить данные в вашу базу данных MySQL. Метод PHP MySQLi и PHP Data Object, или PDO.

Метод с MySQLi

Прежде всего, нужно установить соединение с базой данных. После этого мы можем продолжить с SQL запросом на добавление записи в таблицу MySQL — INSERT. Ниже показан полный пример PHP кода с методами подключения и вставки:

" . mysqli_error($conn);
}
mysqli_close($conn);

?>

Первая часть кода (строки 3 – 18) касается подключения к базе данных. Мы не станем углубляться, так как у нас есть отдельное подробное руководство по этой теме. Если вы хотите знать, что означает каждая строка, читайте, как подключиться к базе данных.

Начнём со строки 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";

Это наиболее важная строка PHP кода, поскольку именно она отвечает за добавление записи в таблицу MySQL. INSERT INTO — это выражение, которое добавляет запись в указанную таблицу базы данных MySQL. В нашем примере мы добавляем данные в таблицу Students.

Двигаясь дальше, в скобках, мы указываем имена столбцов таблицы, в которые хотим добавить значения: (name, lastname, email). Данные будут добавлены в определённом порядке. Если мы напишем (email, lastname, name), значения будут добавлены в неправильном порядке.

Следующая часть — выражение VALUES. Здесь мы задаём наши значения в ранее указанные поля. Таким образом, каждый столбец получит своё значение. Например, в нашем случае это будет что-то вроде: name = Test, lastname = Testing, email = Testing@testing.com.

Также стоит отметить, что мы только что выполнили SQL-запрос с использованием кода PHP. SQL-запросы должны быть заключены в кавычки. В нашем примере всё между кавычками и записанное после $sql = является SQL-запросом.

Следующая часть кода (20 – 22 строки) проверяет успешность нашего запроса:

if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Мы увидим это сообщение, если запрос выполнен успешно.

И последняя часть ( строки 22 – 24) демонстрирует пример другого сообщения.

else {
     echo "Error: " . $sql . "
" . mysqli_error($conn); }

Вы увидите подобное сообщение в случае возникновения ошибки при попытке отправить запрос.

Метод с PHP Data Object (PDO)

Как и в предыдущем примере, нам нужно прежде всего выполнить подключение к базе данных, которое производится при создании нового объекта PDO. Как это сделать, показано в уже не раз упомянутом руководстве. Поскольку подключение к базе данных MySQL является объектом PDO, мы должны использовать различные PDO методы (любую функцию, которая является частью любого объекта) для подготовки и запуска запросов. Методы объектов вызываются слудеющим образом:

$the_Object->the_Method();

PDO позволяет вам подготовить SQL-код перед его выполнением. Перед запуском SQL-запрос оценивается и корректируется. Не секрет, что взломщики могут модифицировать запрос. SQL-инъекция может быть осуществлена просто путём ввода SQL-кода в поле формы. Например:

// Пользователь вписывает это в поле имени пользователя в форме для входа
john"; DROP DATABASE user_table;

// И вот, во что превращается окончательный запрос  
"SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;

Поскольку SQL-код синтаксически правильный, точка с запятой делает из DROP DATABASE user_table новый SQL-запрос, а ваша таблица пользователей удаляется. Подготовляемые запросы, также известные как связываемые переменные не позволят завершить запрос, использовав символы  и ;. Как результат, вредоносная инструкция DROP DATABASE не будет выполнена.

Всегда используйте подготовляемые запросы, когда отправляете или получаете данные из базы данных с PDO

Чтобы использовать подготовляемые запросы, вы должны написать новую переменную, которая вызывает метод prepare() объекта базы данных.

В правильном виде код выглядит так:

 PDO::ERRMODE_EXCEPTION];

// Создаём новое соединение с базой данных MySQL с использованием PDO, $my_Db_Connection - это объект
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// Задаём переменные для человека, которого мы хотим добавить в базу данных
$first_Name = "Test";
$last_Name = "Testing";
$email = "Testing@testing.com";

// Здесь мы создаём переменную, которая вызывает метод prepare() объекта базы данных
// SQL-запрос, который вы хотите запустить, вводится как параметр, а плейсхолдеры записываются следующим образом - :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");

// Теперь мы сообщаем скрипту, на какую переменную фактически ссылается каждый плейсхолдер, используя метод bindParam()
// Первый параметр - это плейсхолдер в приведённом выше выражении, второй параметр - это переменная, на которую он должен ссылаться
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);

// Выполните запрос, используя данные, которые мы только-что определили
// Метод execute() возвращает TRUE, если запрос был выполнен успешно и FALSE в противном случае, позволяя вам создавать собственные сообщения
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

// На этом этапе вы можете изменить данные переменных и выполнить запрос снова, чтобы добавить больше данных в БД.
$first_Name = "John";
$last_Name = "Smith";
$email = "john.smith@email.com";
$my_Insert_Statement->execute();

// Выполните снова с другими переменными 
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Есть так же метод bindValue(), отличающийся от предыдущего.

  • bindParam() — связывает переменную PHP с параметром, достигнув execute(). Первый раз, когда скрипт доходит до метода execute() он видит, что $first_Name ссылается на “Test”, связывает это значение и выполняет запрос. Когда скрипт добирается до метода execute() второй раз, он смотрит, что $first_Name теперь ссылается на “John”, связывает это значение и запускает запрос опять с новым значением. Важно понимать, что мы создаём запрос один раз и повторно используем его, подставляя разные данные в разных местах скрипта.
  • bindValue() — этот метод связывает параметр с заданным значением. Поскольку заданное значение $first_Name — “Test”, при достижении метода bindValue(), оно будет использоваться каждый раз при вызове метода execute() для $my_Insert_Statement.

Обратите внимание, что мы повторно используем переменную $first_Name и задаём ей новое значение во второй раз. Если вы проверите свою базу данных после запуска этого скрипта, там будут оба заданных имени, даже если переменная $first_Name в конце скрипта равна “John”. Помните, что PHP оценивает содержимое всего скрипта перед его выполнением.

Если вы измените свой скрипт, заменив bindParam на bindValue, вы добавите в базу MySQL “Test Testing” дважды, а John Smith будет проигнорирован.

Проверка Статуса Выполнения и Устранение Распространённых Ошибок

Если запрос, который мы выполнили и вставили в базу данных MySQL, был успешным, мы увидим следующее сообщение:

Connect Successfully
New record created successfully

Устранение Распространённых Ошибок

Если же запись содержит ошибку, вы увидите соответствующее сообщение. Но не волнуйтесь, есть множество вариантов, как можно устранить эти ошибки mySQL.

MySQLi

Если вы столкнулись с ошибкой, работая с MySQLi, причина скорее всего в неправильном синтаксисе. Для примера давайте сделаем одну синтаксическую ошибку в нашем коде. В результате мы увидим что-то вроде этого:

Connect successfully
Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"

Как мы видим, первая часть кода в порядке, подключение было успешно установлено, но с нашим SQL-запросом не всё так гладко.

"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Допущена синтаксическая ошибка, которая привела к невозможности выполнения нашего скрипта. Ошибка была допущена здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Мы использовали фигурные скобки вместо простых. Поскольку это неправильно, наш скрипт выдал синтаксическую ошибку.

PDO

В строке 7 подключения PDO, режим обработки ошибок установлен в «display all exceptions» (отображать все исключения). Если вы уберёте это из скрипта и запрос потерпит неудачу, вы не получите никакого сообщения об ошибке. Со включёнными исключениями, будут отображаться конкретные возникшие проблемы.

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

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Другие проблемы, с которым вы можете столкнуться:

  • Неверно указаны столбцы (несуществующие столбцы или ошибки в написании названий).
  • Несоответствие типа значения типу столбца. Например, когда мы хотим присвоить числовое значение 47 полю Name, мы получим ошибку, потому что предполагается, что значение будет строкой. Но, если вы укажете число в кавычках, например, “47”, ошибки не будет, потому что наше число будет записано как строка в этот столбец.
  • Попытка ввести данные в таблицу, которой не существует или ошибка в написании названия таблицы.

Все эти ошибки могут быть исправлены, следуя руководствам по исправлению ошибок или журнала ошибок (англ.).

В случае успешного добавления, наши данные должны появиться в базе. Вот пример таблицы, в которую мы добавили данные, если смотреть в phpMyAdmin.

Добавление Записи в Таблицу MySQL - Вид Таблицы в phpMyAdmin

Создание Таблицы (По необходимости)

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

phpMyAdmin в Панели Управления Хостингом Hostinger

После входа на страницу phpMyAdmin вы увидите подобную картину:

Меню phpMyAdmin

Давайте создадим таблицу с названием Students для нашей базы данных u104357129_name. Создать новую таблицу можно, нажав на кнопку Create Table. После этого вы увидите новую страницу со всеми необходимыми полями для ввода данных.

Окно с Полями для Создания Таблицы MySQL

Поскольку создание таблицы не основная тема этого руководства, мы не будем углубляться в подробности. Если вам нужно больше информации о структуре таблицы/базы данных и о том, какие настройки вы можете использовать для каждого столбца, рекомендуем обратиться к официальной документации phpMyAdmin (англ.).

Здесь приведём лишь несколько простых пояснение столбцов, которые мы будем использовать:

  • Name — это имя столбца. Будет отображено в самом верху вашей таблицы.
  • Type — тип ваших данных. Вы можете указать любой тип: int, varchar, string и многие другие. Например, мы указали varchar, поскольку нам нужно ввести строку переменной длины, содержащую буквы, не цифры.
  • Length/Values — используется для задания максимальной длины вашей записи в столбце.
  • Index — для нашего поля “ID” мы используем индекс “Primary”. Когда создаётся таблица, рекомендуется иметь один столбец ID. Он используется для индексации записей в таблице, когда настраиваются взаимосвязи между таблицами. Здесь также можно отметить “A_I”, что означает Auto Increment. Эта настройки будет автоматически увеличивать индекс (1,2,3,4…).

Нажмите Save, чтобы сохранить вашу таблицу.

Создание PHP Кода и Добавление Записи в Таблицу MySQL (Insert)

Есть два способа вставить данные в вашу базу данных MySQL. Метод PHP MySQLi и PHP Data Object, или PDO.

Метод с MySQLi

Прежде всего, нужно установить соединение с базой данных. После этого мы можем продолжить с SQL запросом на добавление записи в таблицу MySQL — INSERT. Ниже показан полный пример PHP кода с методами подключения и вставки:

" . mysqli_error($conn);
}
mysqli_close($conn);

?>

Первая часть кода (строки 3 – 18) касается подключения к базе данных. Мы не станем углубляться, так как у нас есть отдельное подробное руководство по этой теме. Если вы хотите знать, что означает каждая строка, читайте, как подключиться к базе данных.

Начнём со строки 19:

$sql = "INSERT INTO Students (name, lastname, email) VALUES ('Test', 'Testing', 'Testing@tesing.com')";

Это наиболее важная строка PHP кода, поскольку именно она отвечает за добавление записи в таблицу MySQL. INSERT INTO — это выражение, которое добавляет запись в указанную таблицу базы данных MySQL. В нашем примере мы добавляем данные в таблицу Students.

Двигаясь дальше, в скобках, мы указываем имена столбцов таблицы, в которые хотим добавить значения: (name, lastname, email). Данные будут добавлены в определённом порядке. Если мы напишем (email, lastname, name), значения будут добавлены в неправильном порядке.

Следующая часть — выражение VALUES. Здесь мы задаём наши значения в ранее указанные поля. Таким образом, каждый столбец получит своё значение. Например, в нашем случае это будет что-то вроде: name = Test, lastname = Testing, email = Testing@testing.com.

Также стоит отметить, что мы только что выполнили SQL-запрос с использованием кода PHP. SQL-запросы должны быть заключены в кавычки. В нашем примере всё между кавычками и записанное после $sql = является SQL-запросом.

Следующая часть кода (20 – 22 строки) проверяет успешность нашего запроса:

if (mysqli_query($conn, $sql)) {
     echo "New record created successfully";
}

Мы увидим это сообщение, если запрос выполнен успешно.

И последняя часть ( строки 22 – 24) демонстрирует пример другого сообщения.

else {
     echo "Error: " . $sql . "
" . mysqli_error($conn); }

Вы увидите подобное сообщение в случае возникновения ошибки при попытке отправить запрос.

Метод с PHP Data Object (PDO)

Как и в предыдущем примере, нам нужно прежде всего выполнить подключение к базе данных, которое производится при создании нового объекта PDO. Как это сделать, показано в уже не раз упомянутом руководстве. Поскольку подключение к базе данных MySQL является объектом PDO, мы должны использовать различные PDO методы (любую функцию, которая является частью любого объекта) для подготовки и запуска запросов. Методы объектов вызываются слудеющим образом:

$the_Object->the_Method();

PDO позволяет вам подготовить SQL-код перед его выполнением. Перед запуском SQL-запрос оценивается и корректируется. Не секрет, что взломщики могут модифицировать запрос. SQL-инъекция может быть осуществлена просто путём ввода SQL-кода в поле формы. Например:

// Пользователь вписывает это в поле имени пользователя в форме для входа
john"; DROP DATABASE user_table;

// И вот, во что превращается окончательный запрос  
"SELECT * FROM user_table WHERE username = john"; DROP DATABASE user_table;

Поскольку SQL-код синтаксически правильный, точка с запятой делает из DROP DATABASE user_table новый SQL-запрос, а ваша таблица пользователей удаляется. Подготовляемые запросы, также известные как связываемые переменные не позволят завершить запрос, использовав символы  и ;. Как результат, вредоносная инструкция DROP DATABASE не будет выполнена.

Всегда используйте подготовляемые запросы, когда отправляете или получаете данные из базы данных с PDO

Чтобы использовать подготовляемые запросы, вы должны написать новую переменную, которая вызывает метод prepare() объекта базы данных.

В правильном виде код выглядит так:

 PDO::ERRMODE_EXCEPTION];

// Создаём новое соединение с базой данных MySQL с использованием PDO, $my_Db_Connection - это объект
try { 
  $my_Db_Connection = new PDO($sql, $username, $password, $dsn_Options);
  echo "Connected successfully";
} catch (PDOException $error) {
  echo 'Connection error: ' . $error->getMessage();
}

// Задаём переменные для человека, которого мы хотим добавить в базу данных
$first_Name = "Test";
$last_Name = "Testing";
$email = "Testing@testing.com";

// Здесь мы создаём переменную, которая вызывает метод prepare() объекта базы данных
// SQL-запрос, который вы хотите запустить, вводится как параметр, а плейсхолдеры записываются следующим образом - :placeholder_name
$my_Insert_Statement = $my_Db_Connection->prepare("INSERT INTO Students (name, lastname, email) VALUES (:first_name, :last_name, :email)");

// Теперь мы сообщаем скрипту, на какую переменную фактически ссылается каждый плейсхолдер, используя метод bindParam()
// Первый параметр - это плейсхолдер в приведённом выше выражении, второй параметр - это переменная, на которую он должен ссылаться
$my_Insert_Statement->bindParam(:first_name, $first_Name);
$my_Insert_Statement->bindParam(:last_name, $last_Name);
$my_Insert_Statement->bindParam(:email, $email);

// Выполните запрос, используя данные, которые мы только-что определили
// Метод execute() возвращает TRUE, если запрос был выполнен успешно и FALSE в противном случае, позволяя вам создавать собственные сообщения
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

// На этом этапе вы можете изменить данные переменных и выполнить запрос снова, чтобы добавить больше данных в БД.
$first_Name = "John";
$last_Name = "Smith";
$email = "john.smith@email.com";
$my_Insert_Statement->execute();

// Выполните снова с другими переменными 
if ($my_Insert_Statement->execute()) {
  echo "New record created successfully";
} else {
  echo "Unable to create record";
}

В строках 28, 29 и 30 мы используем метод bindParam() объекта базы данных. Есть так же метод bindValue(), отличающийся от предыдущего.

  • bindParam() — связывает переменную PHP с параметром, достигнув execute(). Первый раз, когда скрипт доходит до метода execute() он видит, что $first_Name ссылается на “Test”, связывает это значение и выполняет запрос. Когда скрипт добирается до метода execute() второй раз, он смотрит, что $first_Name теперь ссылается на “John”, связывает это значение и запускает запрос опять с новым значением. Важно понимать, что мы создаём запрос один раз и повторно используем его, подставляя разные данные в разных местах скрипта.
  • bindValue() — этот метод связывает параметр с заданным значением. Поскольку заданное значение $first_Name — “Test”, при достижении метода bindValue(), оно будет использоваться каждый раз при вызове метода execute() для $my_Insert_Statement.

Обратите внимание, что мы повторно используем переменную $first_Name и задаём ей новое значение во второй раз. Если вы проверите свою базу данных после запуска этого скрипта, там будут оба заданных имени, даже если переменная $first_Name в конце скрипта равна “John”. Помните, что PHP оценивает содержимое всего скрипта перед его выполнением.

Если вы измените свой скрипт, заменив bindParam на bindValue, вы добавите в базу MySQL “Test Testing” дважды, а John Smith будет проигнорирован.

Проверка Статуса Выполнения и Устранение Распространённых Ошибок

Если запрос, который мы выполнили и вставили в базу данных MySQL, был успешным, мы увидим следующее сообщение:

Connect Successfully
New record created successfully

Устранение Распространённых Ошибок

Если же запись содержит ошибку, вы увидите соответствующее сообщение. Но не волнуйтесь, есть множество вариантов, как можно устранить эти ошибки mySQL.

MySQLi

Если вы столкнулись с ошибкой, работая с MySQLi, причина скорее всего в неправильном синтаксисе. Для примера давайте сделаем одну синтаксическую ошибку в нашем коде. В результате мы увидим что-то вроде этого:

Connect successfully
Error: INSERT INTO students {name, lastname, email} VALUES ('Test', 'Testing', 'Testing@testing.com')
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Test', 'Testing', 'Test@testingcom')' at line 1"

Как мы видим, первая часть кода в порядке, подключение было успешно установлено, но с нашим SQL-запросом не всё так гладко.

"Error: INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com') You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Допущена синтаксическая ошибка, которая привела к невозможности выполнения нашего скрипта. Ошибка была допущена здесь:

$sql = "INSERT INTO Students {name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')";

Мы использовали фигурные скобки вместо простых. Поскольку это неправильно, наш скрипт выдал синтаксическую ошибку.

PDO

В строке 7 подключения PDO, режим обработки ошибок установлен в «display all exceptions» (отображать все исключения). Если вы уберёте это из скрипта и запрос потерпит неудачу, вы не получите никакого сообщения об ошибке. Со включёнными исключениями, будут отображаться конкретные возникшие проблемы.

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

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '{name, lastname, email} VALUES ('Thom', 'Vial', 'thom.v@some.com')' at line 1"

Другие проблемы, с которым вы можете столкнуться:

  • Неверно указаны столбцы (несуществующие столбцы или ошибки в написании названий).
  • Несоответствие типа значения типу столбца. Например, когда мы хотим присвоить числовое значение 47 полю Name, мы получим ошибку, потому что предполагается, что значение будет строкой. Но, если вы укажете число в кавычках, например, “47”, ошибки не будет, потому что наше число будет записано как строка в этот столбец.
  • Попытка ввести данные в таблицу, которой не существует или ошибка в написании названия таблицы.

Все эти ошибки могут быть исправлены, следуя руководствам по исправлению ошибок или журнала ошибок (англ.).

В случае успешного добавления, наши данные должны появиться в базе. Вот пример таблицы, в которую мы добавили данные, если смотреть в phpMyAdmin.

Добавление Записи в Таблицу MySQL - Вид Таблицы в phpMyAdmin

1: Создание базы данных

Давайте начнем с создания тестовой базы данных для этого проекта. Подключитесь к серверу по SSH, а затем выполните следующую команду, чтобы войти на сервер MySQL как пользователь root:

sudo mysql -u root -p

Введите root-пароль базы данных MySQL и нажмите Enter, чтобы продолжить.

После этого выполните следующую команду, чтобы создать базу данных. В этом руководстве мы назовем ее test_company:

CREATE DATABASE test_company;

После создания БД вы увидите следующее:

Query OK, 1 row affected (0.01 sec)

Теперь нам нужно создать на сервере MySQL учетную запись test_user; не забудьте заменить PASSWORD сложным паролем:

CREATE USER 'test_user'@'localhost' IDENTIFIED BY 'PASSWORD';

Вы получите следующий результат:

Query OK, 0 rows affected (0.01 sec)

Чтобы предоставить пользователю test_user полные права доступа к базе данных test_company, запустите команду:

GRANT ALL PRIVILEGES ON test_company.* TO 'test_user'@'localhost';

Вы должны получить следующий результат:

Query OK, 0 rows affected (0.01 sec)

В завершение нужно сбросить таблицы привилегий, чтобы MySQL перезагрузил права:

FLUSH PRIVILEGES;

На экране должно появиться:

Query OK, 0 rows affected (0.01 sec)

Теперь, когда база данных test_company и пользователь test_user готовы, мы можем перейти к созданию таблицы. Предположим, нам нужна таблица products для хранения списка товаров. Позже мы попробуем вставить и извлечь данные из этой таблицы, чтобы понять, как работает BLOB в MySQL.

Выйдите из оболочки MySQL:

QUIT;

Затем снова войдите в систему, на этот раз – как пользователь test_user:

mysql -u test_user -p

При появлении запроса введите пароль test_user и нажмите Enter, чтобы продолжить. Затем откройте базу данных test_company, набрав команду:

USE test_company;

Перейдя в базу данных test_company, MySQL отобразит такой результат:

Database changed

Затем создайте таблицу products:

CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;

Эта команда создаст таблицу по имени products. В таблице будет четыре столбца:

  • product_id: в этом столбце используется тип данных BIGINT, он позволяет вместить большой список продуктов, содержащий 2⁶³-1 элементов. Мы пометили столбец как PRIMARY KEY, чтобы присвоить товарам уникальные идентификаторы. Чтобы MySQL мог обрабатывать создание новых идентификаторов, мы использовали ключевое слово AUTO_INCREMENT.
  • product_name: этот столбец содержит названия товаров. Здесь мы использовали тип данных VARCHAR, так как это поле обычно обрабатывает буквенно-цифровые значения длиной до 50 символов; ограничение в 50 символов – это всего лишь гипотетическое значение, используемое для целей этого руководства.
  • price: этот столбец содержит розничные цены наших товаров. Поскольку цена на некоторые товары может выражаться числом с плавающей точкой (например, 23.69, 45.36, 102.99), мы указали здесь тип данных DOUBLE.
  • product_image: в этом столбце мы указали тип данных BLOB, поскольку он предназначен для хранения двоичных данных – изображений товаров.

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

Query OK, 0 rows affected (0.03 sec)

Выйдите из сервера MySQL:

QUIT;

Вы получите сообщение:

Bye

Таблица products готова. Вы можете использовать ее для хранения некоторых записей, включая изображения продуктов. Скоро мы заполним ее данными.

2: Создание PHP-скрипта для заполнения базы данных

На этом этапе мы создадим сценарий PHP, который будет подключаться к базе данных MySQL, созданной в первом разделе руководства. Сценарий подготовит три записи о товарах и вставит их в таблицу products.

Чтобы создать PHP-скрипт, откройте новый файл в текстовом редакторе:

sudo nano /var/www/html/config.php

Затем вставьте в него следующую информацию (замените PASSWORD паролем test_user, который вы создали в разделе 1):

define('DB_NAME', 'test_company');

define('DB_USER', 'test_user');

define('DB_PASSWORD', 'PASSWORD');

define('DB_HOST', 'localhost');

$pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Сохраните и закройте файл.

В этом файле для подключения к базе данных MySQL мы использовали четыре константы PHP:

  • DB_NAME: эта константа содержит имя базы данных, test_company.
  • DB_USER: содержит имя пользователя, test_user.
  • DB_PASSWORD: хранит пароль учетной записи test_user.
  • DB_HOST: определяет сервер, на котором находится база данных. В этом случае это сервер localhost.

Следующая строка в файле инициирует PHP Data Object (PDO) и подключается к базе данных MySQL:

...

$pdo = new PDO("mysql:host=" . DB_HOST . "; dbname=" . DB_NAME, DB_USER, DB_PASSWORD);

...

Ближе к концу файла мы установили пару атрибутов PDO:

  • ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION: этот атрибут генерирует исключение, которое может быть зарегистрировано и использовано в целях отладки.
  • ATTR_EMULATE_PREPARES, false: повышает безопасность, так как перепоручает подготовку ядру базы данных MySQL вместо PDO.

Файл /var/www/html/config.php нужно включить в два сценария PHP, которые мы создадим далее. Они будут отвечать за вставку и извлечение записей соответственно.

Сначала создайте PHP-скрипт /var/www/html/insert_products.php для вставки записей в таблицу products:

sudo nano /var/www/html/insert_products.php

Затем добавьте следующие конфигурации в файл /var/www/html/insert_products.php:

require_once 'config.php';

$products = [];

              'product_name' => 'VIRTUAL SERVERS',

$products[] = [

              'price' => 5,

              'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png")

              ];

$products[] = [

              'product_name' => 'MANAGED KUBERNETES',

              'price' => 30,

              'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png")

              ];

$products[] = [

              'product_name' => 'MySQL DATABASES',

              'price' => 15,

              'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" )

              ];

$sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)";

foreach ($products as $product) {

    $stmt = $pdo->prepare($sql);

    $stmt->execute($product);

}

echo "Records inserted successfully";

Сохраните и закройте файл.

Этот файл нужен для определения переменных базы данных и подключения к ней. Файл также инициирует объект PDO и сохраняет его в переменной $pdo. Мы ссылаемся на файл config.php вверху.

Затем мы создали массив данных о товарах, которые нужно вставить в БД. Помимо product_name и price, которые заданы в виде строк и числовых значений соответственно, сценарий использует встроенную функцию PHP file_get_contents для чтения изображений из внешнего источника и передачи их в виде строк в столбец product_image.

После этого мы подготовили оператор SQL и использовали оператор PHP foreach{…} для вставки каждого продукта в базу данных.

Запустите /var/www/html/insert_products.php в окне браузера, используя следующий URL-адрес (не забудьте заменить your-server-IP внешним IP-адресом сервера):

http://your-server-IP/insert_products.php

На экране вы увидите сообщение об успешном выполнении файла – следовательно, записи были вставлены в базу данных.

Records inserted successfully

Итак, мы успешно вставили три записи, содержащие изображения товаров, в таблицу. На следующем этапе мы напишем сценарий PHP для извлечения этих записей и отображения их в браузере.

3: Извлечение и визуализация данных из БД MySQL

Имея ​в базе данных информацию и изображения товаров, вы можете написать второй сценарий PHP, который будет запрашивать и отображать данные в таблице HTML в браузере.

Чтобы создать файл, введите:

sudo nano /var/www/html/display_products.php

Затем вставьте в файл следующее:

  Using BLOB and MySQL

 

 

  require_once 'config.php';

  $sql = "SELECT * FROM products";

  $stmt = $pdo->prepare($sql);

  $stmt->execute();

  ?>

 

   

     

     

     

     

   

 

  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {

      echo '

';

      echo '

';

      echo '

';

      echo '

';

      echo '

';

      echo '

';

  }

  ?>

 

Products Database
Product Id Product Name Price Product Image
' . $row['product_id'] . '' . $row['product_name'] . '' . $row['price'] . '' .

      ''

      . '

 

Сохраните изменения в файле и закройте его.

Мы снова сослались на файл config.php для подключения к базе данных. Затем мы с помощью PDO создали и выполнили оператор SQL для извлечения всех элементов из таблицы; это делается при помощи команды SELECT * FROM products.

Затем мы создали таблицу HTML и заполнили ее данными о товарах с помощью PHP-оператора while() {…}. Строка $row = $stmt->fetch(PDO::FETCH_ASSOC) запрашивает БД и сохраняет результат в переменной $row в виде многомерного массива, который затем отображается в столбце таблицы HTML с помощью $row[‘column_name’].

Изображения из столбца product_image заключены в теги . Мы задали атрибуты ширины и высоты, чтобы уменьшить размер изображений (иначе бы они не поместились в столбце таблицы HTML).

Чтобы преобразовать данные, содержащиеся в типе BLOB, обратно в изображения, мы использовали встроенную PHP функцию base64_encode и следующий синтаксис для схемы Data URI:

data:media_type;base64, base_64_encoded_data

В этом случае image/png – это media_type, а строка в кодировке Base64 из столбца product_image – это base_64_encoded_data.

Запустите файл display_products.php в веб-браузере:

http://your-server-IP/display_products.php

После запуска файла display_products.php вы увидите в браузере HTML-таблицу со списком товаров и их изображениями.

Это значит, что наш сценарий PHP правильно извлекает и визуализирует изображения и другие данные MySQL.