Вы находитесь на странице: 1из 6

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 47. ДОПОЛНИТЕЛЬНЫЕ ВОЗМОЖНОСТИ PHP. БАЗЫ ДАННЫХ. PHP


И MYSQL.

В PHP в стандартном пакете предлагается несколько решений для работы с


базами данных на основе языка SQL:
- PHP MySQL;
- PHP MySQLi;
- PHP (PDO).
В настоящий момент широко используются MySQLi и PDO. В этом уроке Вы
изучите основы и базовые операции с СУБД MySQL с помощью расширения
MySQLi (MySQL Improved), рекомендуемого к использованию для версий MySQL
4.1.3 и выше. Кроме того, расширение PDO не рассматривается в данном курсе по
причине того, что использует объектно-ориентированный подход в формировании
запросов и команд для работы с СУБД, который не рассматривался ранее. Для
изучения расширения PDO стоит первоначально изучить теорию и основы
объектно-ориентированного программирования в целом и ООП в PHP в частности.

Расширение PHP MySQLi


PHP MySQLi – расширение, предлагаемое разработчику для взаимодействия
с базой данных MySQL, учитывающее возможности свежих версий СУБД, начиная
с 4.1.3 и выше. Включается в пакет поставки PHP, начиная с версий 5 и выше.
Буква i в названии MySQLi означает improved (улучшенный), что говорит о
более расширенном базовом наборе возможностей
Имеет следующие особенности, отличающие от расширения PHP MySQL:
- объектно-ориентированный интерфейс;
- поддержку подготавливаемых запросов, мультизапросов и транзакций;
- расширенные возможности отладки;
- поддержку встроенного сервера.
Предоставляет вариант выбора интерфейса: объектно-ориентированный,
либо классический процедурный. При разработке строго не рекомендуется
смешивать процедурный и объектно-ориентированный стили. Далее Вы
рассмотрите только процедурный стиль расширения MySQLi и его базовые
возможности, необходимые для работы.

Основные возможности расширения MySQLi


Все возможности, рассматриваемые далее являются основой для работы с
базами данных. Чтобы изучить все возможности расширения, рекомендуется
обратиться к руководству, т. к. полное описание может занять отдельный курс.
1) mysqli_connect()
Устанавливает новое соединение с сервером MySQL.
Синтаксис:
mysqli mysqli_connect([string $host = ini_get("mysqli.default_host") [, string $username =
ini_get("mysqli.default_user") [, string $password = ini_get("mysqli.default_pw") [, string
$dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket =
ini_get("mysqli.default_socket")]]]]]])
Содержит следующие параметры:
- $host – представляет собой имя хоста или IP-адрес. Является
необязательным параметром и в случае, если задан “NULL”, пустая строка или
строка “localhost”, будет означать, что сервер MySQL запущен на локальном хосте.

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Если перед именем хоста задать строку “p:”, то будет открыто постоянное
соединение вплоть до его закрытия;
- $username – имя пользователя MySQL. Если не задан, то используется
значение, заданное в настройках сервера по умолчанию;
- $password – пароль пользователя MySQL. Если не задан, задан как строка
“NULL”, пустая строка, то в первую очередь будет произведена попытка
аутентифицировать пользователя $username, имеющего пароль и только затем
будет искать среди пользователей, у которых нет пароля. Это позволяет одному и
тому же пользователю назначать различные права в зависимости от наличия
пароля;
- $dbname – имя базы данных, используемое при подключении по умолчанию.
Если не задано, то в последующих запросах будет необходимо явно указать базу
данных, например, через запрос USE, либо указывать полный путь к конкретной
записи или таблице;
- $port – номер порта для подключения к серверу MySQL;
- $socket – сокет, который необходимо использовать. Передача параметра
$socket не будет явно задавать тип соединения при подключении к серверу MySQL.
То, как будет устанавливаться соединение с MySQL-сервером, определяется
параметром $host.
Пример команды mysqli_connect():
$connect = mysqli_connect(‘localhost’, ‘username’, ‘password’, ‘db_name’);
2) mysqli_change_user()
Сменяет пользователя, подключенного к базе данных
Синтаксис:
bool mysqli_change_user(mysqli $link, string $user, string $password [, string $database])
Содержит следующие параметры:
- $link – идентификатор соединения, полученный, например, с помощью
mysqli_connect();
- $user – имя нового пользователя для доступа к MySQL;
- $password – пароль для пользователя $user;
- $database – имя базы данных. В случае, если смена пользователя требуется
без выбора базы данных, то параметр не указывается.
Пример команды mysqli_change_user():
mysqli_change_user($connect, ‘new_user’, ‘user_pass’, ‘new_db’);
3) mysqli_select_db()
Позволяет выбрать или изменить базу данных для выполняемых запросов
Синтаксис:
bool mysqli_select_db(mysqli $link , string $db_name)
Содержит следующие параметры:
- $link - идентификатор соединения, полученный, например, с помощью
mysqli_connect();
- $db_name – имя устанавливаемой базы данных.
Пример команды mysqli_select_db():
mysqli_select_db($connect, ‘new_db’);
4) mysqli_set_charset()
Задает кодировку символов для передаваемых запросов
Синтаксис:
bool mysqli_set_charset(mysqli $link, string $charset)

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Содержит следующие параметры:


- $link - идентификатор соединения, полученный, например, с помощью
mysqli_connect();
- $charset – набор символов, который необходимо использовать.
Пример команды mysqli_set_charset():
mysqli_set_charset($connect, "utf8");
5) mysqli_close()
Закрывает ранее открытое соединение с базой данных.
Стоит отметить, что непостоянные соединения (без символов “p:”
автоматические удаляются сразу после завершения скрипта, что не обязывает
закрывать такие соединения. В свою очередь, рекомендуется прописывать
закрытие соединения для освобождения ресурсов базы данных и памяти.
Синтаксис:
bool mysqli_close(mysqli $link)
Содержит следующие параметры:
- $link - идентификатор соединения, полученный, например, с помощью
mysqli_connect().
Пример команды mysqli_close():
mysqli_close($connect);
6) mysqli_connect_error()
Возвращает описание последней ошибки подключения
Синтаксис:
string mysqli_connect_error()
Пример команды mysqli_connect_error()
$connect = mysqli_connect(‘localhost’, ‘username’, ‘password’, db_name);
if(!$connect)
die(‘Ошибка подключения к базе данных: ’. mysqli_connect_error());
7) mysqli_connect_errno()
Возвращает код ошибки последней попытки подключения
Синтаксис:
int mysqli_connect_errno()
Пример команды mysqli_connect_errno(void):
$connect = mysqli_connect(‘localhost’, ‘username’, ‘password’, db_name);
if(!$connect)
die(‘Код ошибки подключения к базе данных: ’. mysqli_connect_errno());
8) mysqli_query()
Выполняет запрос к базе данных
Синтаксис:
mixed mysqli_query(mysqli $link, string $query [, int $resultmode =
MYSQLI_STORE_RESULT])
Содержит следующие параметры:
- $link - идентификатор соединения, полученный, например, с помощью
mysqli_connect();
- $query – текст SQL-запроса (данные должны быть экранированы в
соответствии с правилами экранирования символов);
- $resultmode - константа, определяющая возможность последующих вызовов
данной функции. По умолчанию выбран режим MYSQLI_STORE_RESULT.
Пример команды mysqli_query():

3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

$query = mysqli_query($connect, ‘SHOW TABLES’);


9) mysqli_fetch_assoc()
Извлекает результирующий ряд в виде ассоциативного массива. Стоит
заметить, что функция извлекает только один ряд из всего массива данных (одну
запись из таблицы, например) и для вывода группы записей необходимо
использовать циклические конструкции.
Синтаксис:
array mysqli_fetch_assoc(mysqli_result $result)
Содержит параметры:
- $result - идентификатор результата запроса, полученный, например, с
помощью mysqli_query().
Пример команды mysqli_fetch_assoc():
$array = mysqli_fetch_assoc($query);

Пример использования SQL-запросов и расширения MySQLi


Рассмотрим пример использования ранее рассмотренных возможностей
работы с СУБД MySQL с помощью расширения PHP MySQLi:
Листинг 47.1. Работа с СУБД MySQL с помощью расширения PHP
MySQLi

//Создаем подключение к базе данных под пользователем root


$connect = mysqli_connect('localhost', 'root', '') or die('<p><b>Ошибка доступа к базе
данных:</b> '.mysqli_connect_error().', <b>код ошибки:</b> '.mysqli_connect_errno().'</p>');

if($connect) {
echo "<p><b>Соединение с БД установлено!</b></p>";
}

//Сменим пользователя на php_test


mysqli_change_user($connect, 'php_test', '123456', '');

//Выберем базу данных для работы


mysqli_select_db($connect, 'php_test');

//Получаем все записи методом выборки SELECT, создав запрос


$query = "SELECT * FROM php_table";
$result = mysqli_query($connect, $query);

//Выведем на экран результат запроса, который в процессе вывода переформируем


в ассоциативный массив
echo "<b>Первый результат вывода на экран таблицы php_test:</b>";
while($array = mysqli_fetch_assoc($result)) {
echo "<p>";
foreach($array as $k => $v)
echo "[<i>{$k}</i>]: <b>$v</b> || ";
echo ";</p><hr>";
}

4
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

//Добавляем в базу данных новую запись


$pass = password_hash('1234567890', PASSWORD_DEFAULT);
$query = "INSERT INTO php_table VALUES (NULL, 'А.Эйнштейн', 'einstein.a@mail.com',
'$pass', 24)";
$result = mysqli_query($connect, $query) or die('Ошибка ввода данных:
'.mysqli_connect_error());

//Выведем на экран все записи с учетом новой


$query = "SELECT * FROM php_table";
$result = mysqli_query($connect, $query);
echo "<b>Результат вывода на экран таблицы php_test после внесения данных:</b>";
while($array = mysqli_fetch_assoc($result)) {
echo "<p>";
foreach($array as $k => $v)
echo "[<i>{$k}</i>]: <b>$v</b> || ";
echo ";</p><hr>";
}

//Обновим данные new_user_2


$query = "UPDATE php_table SET user_name = 'Иван', user_mail = 'ivan@gmail.com'
WHERE user_name = 'new_user_2'";
$result = mysqli_query($connect, $query);

//Выведем на экран все записи с учетом новой


$query = "SELECT * FROM php_table";
$result = mysqli_query($connect, $query);
echo "<b>Результат вывода на экран таблицы php_test после внесения данных:</b>";
while($array = mysqli_fetch_assoc($result)) {
echo "<p>";
foreach($array as $k => $v)
echo "[<i>{$k}</i>]: <b>$v</b> || ";
echo ";</p><hr>";
}

//Закрываем соединение с базой данных


mysqli_close($connect);
В результате работы скрипта на экране Вы получите следующую картину:
Первый результат вывода на экран таблицы php_test:
[user_id]: 1 || [user_name]: admin || [user_mail]: admin@mail.com || [user_pass]:
123456 || [user_age]: 21 || ;
[user_id]: 2 || [user_name]: new_user || [user_mail]: user@mail.ru || [user_pass]:
e10adc3949ba59abbe56e057f20f883e || [user_age]: 25 || ;
[user_id]: 3 || [user_name]: New_user_2 || [user_mail]: newuser2@mail.com ||
[user_pass]: e10adc3949ba59abbe56e057f20f883e || [user_age]: 23 || ;
[user_id]: 4 || [user_name]: А.Эйнштейн || [user_mail]: einstein.a@mail.com ||
[user_pass]: $2y$10$HDMC9ohhpSpnOBTb1Adeh.ym/jEqDbFmo8Z.wZ25G00CwJxOKOrmW ||
[user_age]: 24 || ;

5
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Результат вывода на экран таблицы php_test после внесения данных:


[user_id]: 1 || [user_name]: admin || [user_mail]: admin@mail.com || [user_pass]:
123456 || [user_age]: 21 || ;
[user_id]: 2 || [user_name]: new_user || [user_mail]: user@mail.ru || [user_pass]:
e10adc3949ba59abbe56e057f20f883e || [user_age]: 25 || ;
[user_id]: 3 || [user_name]: New_user_2 || [user_mail]: newuser2@mail.com ||
[user_pass]: e10adc3949ba59abbe56e057f20f883e || [user_age]: 23 || ;
[user_id]: 4 || [user_name]: А.Эйнштейн || [user_mail]: einstein.a@mail.com ||
[user_pass]: $2y$10$HDMC9ohhpSpnOBTb1Adeh.ym/jEqDbFmo8Z.wZ25G00CwJxOKOrmW ||
[user_age]: 24 || ;
Результат вывода на экран таблицы php_test после внесения данных:
[user_id]: 1 || [user_name]: admin || [user_mail]: admin@mail.com || [user_pass]:
123456 || [user_age]: 21 || ;
[user_id]: 2 || [user_name]: new_user || [user_mail]: user@mail.ru || [user_pass]:
e10adc3949ba59abbe56e057f20f883e || [user_age]: 25 || ;
[user_id]: 3 || [user_name]: Иван || [user_mail]: ivan@gmail.com || [user_pass]:
e10adc3949ba59abbe56e057f20f883e || [user_age]: 23 || ;
[user_id]: 4 || [user_name]: А.Эйнштейн || [user_mail]: einstein.a@mail.com ||
[user_pass]: $2y$10$HDMC9ohhpSpnOBTb1Adeh.ym/jEqDbFmo8Z.wZ25G00CwJxOKOrmW ||
[user_age]: 24 || ;

Вам также может понравиться