Отправляет email-рассылки с помощью сервиса Sendsay

Как сделать популярный сайт.

  Все выпуски  

Как сделать популярный сайт. ~~~~~ Функции PHP разделов MySQL и MySQLi ~~~~~


Добрый день,
уважаемые читатели рассылки
"Как сделать популярный сайт"
Выпуск 205.
~~~~~ Функции PHP разделов MySQL и MySQLi ~~~~~
Внимание! Если ваша почтовая программа не отображает корректно рисунки или тексты, то
Нажмите здесь :: http://kocby.ru/post/webmaster/text/issue205.html

Функции PHP разделов MySQL и MySQLi

Если Вы не популярны,
Значит, Вас как бы и не существует...



Как сделать популярный сайт. Выпуск 205. Функции PHP разделов MySQL и MySQLi (Improved Extension, улучшенная версия). Очень большая вероятность, что нам с вами в ближайшие время придется решать проблему переделки кодов проектов PHP+MySQL. Дело в том, что функции соединения с БД MySQL старого раздела в версиях 5.4 и 5.5 трактуются как deprecated (устаревшие), и в ближайшем будущем их использование будет запрещено. Самое время заняться переходом к новым функциям подключения с БД MySQL. Для этого следует знать старые и новые способы подключения.
© Перепечатка разрешается с установкой ссылки на ресурс http://kocby.ru/.



Уважаемые коллеги!

В нашем последнем выпуске...

"Денвер 2014" :: http://kocby.ru/post/webmaster/text/issue204.html

Мы затронули тему установки "Денвера". Вообще, это есть хорошая практика - протестировать новый функционал сначала на "Денвере", на локальном компьютере, затем устанавливать ее на тестовой схеме в Интернете. И только потом уже перенести на боевую схему. Кажется, что так долго, но на самом деле, практика показывает, что так быстрее, т.к. большинство проблем выявляются на тестовых этапах.

Сегодня мы поговорим о способах подключения базы данных MySQL через PHP.

Есть очень большая вероятность, что нам с вами в ближайшие время придется решать проблему переделки кодов проектов PHP+MySQL. Дело в том, что функции соединения с БД MySQL старого раздела в версиях 5.4 и 5.5 трактуются как deprecated (устаревшие), и в ближайшем будущем их использование будет запрещено. Самое время заняться переходом к новым функциям подключения с БД MySQL. Для этого следует знать старые и новые способы подключения.

Что мы называем старым способом подключения с БД MySQL

Старый способ подключения к MySQL, это когда мы устанавливаем соединение примерно вот так:
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);


А затем, если $link оказался хорошим, определяем к данному соединению конкретную базу данных:
mysql_select_db(DB_NAME, $link);


Выборку данных получаем примерно так:
$sql = 'SELECT * FROM `drinks`';
$result = mysql_query($sql, $link);
$row = mysql_fetch_assoc($result);


Большинство функций MySQL принимают опционно в виде последнего параметра идентификатор линка связи, как, например, $link в нашем примере выше для mysql_query($sql, $link);

Но данный параметр можно и опустить. Т.е. в нашем случае можно просто было указать так: mysql_query($sql);

В этом случае будет использоваться последний открытый линк соединения, как, например, в нашем примере выше: mysql_select_db(DB_NAME, $link);

Если же такого открытого линка соединения нет, то связь устанавливается по параметру по умолчанию, определенному в файле php.ini.

Если соединение оказалось неуспешным, то функции возвращают значение FALSE.

После того, как мы закончим работу с текущим результатом выборки из БД, следует очистить память путем:
mysql_free_result($result);

После того, как мы закончим работу с БД, следует закрыть соединение с БД путем:
mysql_close($link);

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

Что мы называем новым способом подключения с БД MySQL - MySQLi (Improved Extension)

MySQLi (Improved Extension) или улучшенное расширение, или улучшенная версия, или улучшенный набор функций подключения к БД (базе данных) MySQL.

Такой вот расширенный многослойный перевод выражения "Improved Extension" дает нам возможность сходу лучше понять суть этого функционала.

Улучшенное расширение MySQLi по сравнению со старым простым MySQL дает ряд важных преимуществ:
  • Появился ООИ (Объектно Ориентированный Интерфейс), а также сохранился и старый процедурный
  • Поддержка Преподготовленных выражений (Prepared Statements)
  • Поддержка Множественных выражений (Multiple Statements)
  • Поддержка Транзакций (Transactions)
  • Расширенные возможности отладки (debugging)
  • Встроенная поддержка сервера


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

Но сейчас гораздо важнее другое: старый способ подключения MySQL просто будет невозможен в новых версиях PHP (выше 5.5), поэтому следует перевести курируемые нами проекты от старого подключения к новому. Можно, конечно, пойти другим путем, цепляться до последнего за старые версии PHP со старым способом подключения к БД MySQL, но большого смысла в этом подходе я не вижу. Лучше уж спокойно шагать в ногу со временем, своевременно и не спеша обновлять используемый софт.

Итак, как же наиболее безболезненно выполнить этот переход?

Обратите внимание на такой момент. В новом способе подключения MySQLi появился ООИ (Объектно Ориентированный Интерфейс), а также сохранился и старый процедурный. Гораздо проще, особенно если вы не очень хорошо чувствуете себя в ООП (Объектно Ориентированном Программировании), осуществить переход на процедурный стиль MySQLi.

MySQLi - процедурный стиль

Сейчас мы возьмем пример работы с БД MySQL выше, в котором мы использовали старый способ подключения MySQL и изложим все функции в процедурном стиле MySQLi.

Старый способ подключения к MySQL:
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);


Новый способ подключения к MySQL (процедурный стиль):
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);


Пояснение. Новинка в том, что теперь имеется 4-й параметр в функции подключения (см константу DB_NAME), т.е. теперь можно и, очевидно, следует, сразу указывать требуемую базу данных для подключения.

Старый способ: определяем к данному соединению конкретную базу данных:
mysql_select_db(DB_NAME, $link);

Новый способ (процедурный стиль): ПЕРЕопределяем к данному соединению ДРУГУЮ базу данных:
mysqli_select_db($link, DB_NAME);

Пояснение. В новом способе это именно ПЕРЕопределение базы данных. Если при подключении mysqli_connect текущая база данных нас устраивает, то mysqli_select_db не обязательно использовать. А вот в старом способе mysql_select_db никак нельзя избежать. Обратите внимание, что поменялся порядок параметров. Для mysql_select_db сначало имя базы данных, затем соединение. Для mysqli_select_db сначало соединение, затем имя базы данных.

Старый способ: Выборка данных из БД:
$sql = 'SELECT * FROM `drinks`';
$result = mysql_query($sql, $link);
$row = mysql_fetch_assoc($result);


Новый способ (процедурный стиль): Выборка данных из БД:
$sql = 'SELECT * FROM `drinks`';
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_assoc($result);


Пояснение. Та же самая ловушка для невнимательных кодировщиков. Поменялся порядок параметров. Для mysql_query сначало sql выражение, затем соединение. Для mysqli_select_db сначало соединение, затем sql выражение.

Старый способ: очистка памяти с текущим результатом выборки из БД:
mysql_free_result($result);

Новый способ (процедурный стиль): очистка памяти с текущим результатом выборки из БД:
mysqli_free_result($result);

Пояснение. Принципиальной разницы нет. Функция mysql_free_result возвращает TRUE (если успешно) или FALSE (если неуспешно). Функция mysqli_free_result ничего не возвращает.

Старый способ: закрыть соединение с БД:
mysql_close($link);

Новый способ (процедурный стиль): закрыть соединение с БД:
mysqli_close($link);

Пояснение. Принципиальной разницы нет. Функции mysql_close и mysqli_close возвращают TRUE (если успешно) или FALSE (если неуспешно).

Это был минимальный запас знаний, которого вполне достаточно для перевода курируемого проекта со старого функционала на новый. Остальные функции следует изменять по аналогии.

MySQLi - объектно-ориентированный стиль

Для полноты картины, для самых ярых поклонников ООП привожу теперь сравнение между процедурным стилем и объектно-ориентированным стилем. Это, кстати, может пригодится, если руководитель проекта (заказчик) потребует перевод именно на ОО стиль.

Новый способ подключения к MySQL (процедурный стиль):
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

Новый способ подключения к MySQL (объектно-ориентированный стиль):
$link = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

Пояснение. Также теперь имеется 4-й параметр в функции подключения (см константу DB_NAME), т.е. теперь можно и, очевидно, следует, сразу указывать требуемую базу данных для подключения.

Новый способ (процедурный стиль): ПЕРЕопределяем к данному соединению ДРУГУЮ базу данных:
mysqli_select_db($link, DB_NAME);

Новый способ (объектно-ориентированный стиль): ПЕРЕопределяем к данному соединению ДРУГУЮ базу данных:
$link->select_db(DB_NAME);

Пояснение. В новом способе это именно ПЕРЕопределение базы данных. Если при подключении текущая база данных нас устраивает, то mysqli_select_db (select_db) не обязательно использовать.

Новый способ (процедурный стиль): Выборка данных из БД:
$sql = 'SELECT * FROM `drinks`';
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_assoc($result);

Новый способ (объектно-ориентированный стиль): Выборка данных из БД:
$sql = 'SELECT * FROM `drinks`';
$result = $link->query($sql);
$row = $result->fetch_assoc();


Пояснение. Разница в синтаксисе между процедурным стилем и объектно-ориентированным стилем интуитивно понятна. Убирается префикс mysqli_ и добавляется констукция ->

Новый способ (процедурный стиль): очистка памяти с текущим результатом выборки из БД:
mysqli_free_result($result);

Новый способ (объектно-ориентированный стиль): очистка памяти с текущим результатом выборки из БД:
$result->close();

Пояснение. См пример выше для сравнения.

Новый способ (процедурный стиль): закрыть соединение с БД:
mysqli_close($link);

Новый способ (объектно-ориентированный стиль): закрыть соединение с БД:
$link->close();

Пояснение. См пример выше для сравнения.

Практические занятия по теме

Теперь полученные нами знания закрепим на практике.

Для этого скачайте дистрибутив → mysqli.zip

В состав дистрибутива входят файлы:
contest.sql - скрипт для установки базы данных (простейший образец из трех логически связанных таблиц, в каждой по несколько записей).
constants.php - определение констант для подключения базы данных (DB_HOST, DB_USER, DB_PASSWORD, DB_NAME).
index.php - файл для запуска тестирования.

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

Если какое-то соединение дает ошибку, то, возможно, например, что PHP новой версии и уже не дает возможность соединения старым способом.

На данном хостинге можно посмотреть, как работает скрипт здесь → http://kocby.ru/post/webmaster/mysqli/

Спасибо за внимание.

~~~~~ Обратная связь ~~~~~

У вас есть два способа реагирования на данный выпуск.

На форуме...

"Как сделать популярный сайт" на форуме :: http://kocby.ru/b/viewforum.php?f=5

Написать лично мне.

Данные для связи на контактной страничке :: http://kocby.ru/contact.html

Ниже дан мой работающий емейл, но доставка через форму на указанном урле надежнее, ее вероятность является почти 100%.
::::::::::::::::::::::::
::: Vladimir Abramov :::
::: va@sumat.ru ::::::::
::: http://sumat.ru/ :::
::::::::::::::::::::::::

### Конец выпуска.

В избранное