Подключение к базе данных в PHP через mysql, pdo и mysqli
Прежде чем подключиться к MySQL серверу необходимо определиться с PHP расширением, которое будет использоваться для работы с базой данных. Под расширением понимается драйвер — посредник между сервером базы и программистом. Он содержит набор функций или объектов, которые упрощают работу программиста. На данный момент выделяют 3 основных расширения.
- MySQL;
- MySQLi;
- PDO.
Все 3 расширения являются стандартным набором для любой хорошей хостинг-площадки. Однако, по умолчанию некоторые могут быть отключены в настройках PHP модулей. Информацию о включенных модулях возвращает функция «phpinfo» с параметром «8».
phpinfo(8);
Доступность модуля можно определить с помощью простой конструкции в коде.
if (extension_loaded('mysql')) echo ' mysql доступен ';
if (extension_loaded('mysqli')) echo ' mysqli доступен ';
if (extension_loaded('PDO')) echo ' pdo доступен ';
Подключение к MySQL через одноименное расширение
Расширение MySQL появилось первым и долгое время не имело конкурентов. Сейчас считается устаревшим и в серьезных проектах не используется. На это есть ряд причин, основными из которых являются плохая оптимизация и безопасность, отсутствие многопоточности. Несмотря на это, оно ещё долго будет поддерживаться большинством хостингов.
Начиная с PHP версии 5.5 многие функции расширения стали устаревшими, а в PHP 7 и вовсе не поддерживаются.
Рассмотрим пример подключения к базе данных с комментариями.
// Подключаемся к серверу БД
$mysql = mysql_connect($db_server, $db_user, $db_password);
if (!$mysql) { die ('Connection error: ' . mysql_error()); }
// Выбираем БД
$db = mysql_select_db($db_name, $mysql);
if (!$db) { die ('Error select db : ' . mysql_error()); }
// Устанавливаем кодировку подключения
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
// Запросы ...
// Отключаемся от базы
mysql_close($mysql);
В качестве запросов используется стандартный SQL. Рассмотрим простые примеры выборки и добавления записей.
// Составляем запрос
$sql = 'SELECT * FROM `books` WHERE `BAuthor`="Пушкин"';
$result = mysql_query($sql);
// Перебор результата
while($row = mysql_fetch_array($result)) {
print $row['BName'] . '<br>';
}
В примере производим простую выборку записей из таблицы «books». Результат представлен в качестве ассоциативного массива, поэтому его содержимое можно получить в обычном цикле. Если запрос не возвращает набор данных, то в качестве результата возвращается «false» или «true».
$sql = 'SELECT * FROM `books` WHERE `BAuthor`="Пушкин"';
$result = mysql_query($sql);
if ($result) { echo 'Выполнено!'; }
else { echo 'Ошибка: ' . mysql_error(); }
Отличие MySQLi от MySQL
MySQLi пришло на смену MySQL. Буква «i» обозначает улучшенный (Improved). Имеет частичную совместимость со старой версией. Поддерживается всеми версиями PHP. Имеет чуть большую скорость работы и лучшую безопасность. Установлено на 99% хостинговых площадках.
Одной из важных особенностей является наличие объектно-ориентированного интерфейса. Если раньше работы с базой данных осуществлялись при помощи интерфейса функций, то теперь можно использовать оба подхода. Рассмотрим пример подключения к базе данных через MySQLi средствами «ООП».
// Пытаемся соединиться
$mysqli = new mysqli($db_server, $db_user, $db_password, $db_name);
// Проверяем, удалось ли соединение
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// Устанавливаем кодировку подключения
$mysqli->set_charset('utf8');
// Формируем запрос
$sql = 'SELECT * FROM `books` WHERE `BAuthor`="Пушкин"';
$result = $mysqli->query($sql);
// Перебор результата
while($row = $result->fetch_object()) {
print $row->BName .'<br>';
}
// Освобождаем память
$result->free();
// Закрываем соединение
$mysqli->close();
Так осуществляется простая выборка названий книг из поля «BName» таблицы «books». Вставка и обновление существующих записей так же не отличается сложностью.
$sql = 'UPDATE `books` SET `BPrice` = "99" WHERE `BId`=1';
$result = $mysqli->query($sql);
print ($result)?'Success!':'Error : ('. $mysqli->errno .') '. $mysqli->error;
В конце запроса осуществляем проверку, удалось ли обновить запись.
Подключение к базе через PDO
PDO — расширение для PHP, которое расшифровывается как PHP Data Objects. Его особенностью является повышенная безопасность и универсальный интерфейс работы с различными базами данных. Другими словами, если с помощью MySQLi можно создавать запросы только для MySQL сервера, то PDO позволяет работать с различными серверами используя один и тот же синтаксис запросов. Это удобно если разработчик заранее не знает под управлением какого сервера будет работать конечный продукт.
У PDO есть свой механизм соединения с базой данных — «DSN» (Data Source Name). Кроме адреса сервера, логина и пароля, он должен принять тип базы данных. Посмотрим пример подключения.
$dsn = "mysql:host=$db_server;dbname=$db_name;charset=utf8";
// Параметры задают что в качестве ответа получаем ассоциативный массив
$opt = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
// Проверка корректности подключения
try { $pdo = new PDO($dsn, $db_user, $db_password, $opt); }
catch (PDOException $e) { die('Подключение не удалось: ' . $e->getMessage()); }
// Формируем запрос
$sql = 'SELECT * FROM `Real_Polls`';
$result = $pdo->query($sql);
// Перебор и вывод результатов
while ($row = $result->fetch()) {
echo $row['p_poll'] . "\n";
}
// Закрываем соединение
$pdo = NULL;
Точно так же осуществляются и другие действия с записями и таблицами. Только меняем SQL запрос и вызываем выполнение методом «exec».
$sql = 'UPDATE `books` SET `BPrice` = "99" WHERE `BId`=1'; $result = $pdo->exec($sql);
Метод «exec» в отличии от «query» не может получать данные из базы данных. Он возвращает количество записей, которые были затронуты в результате работы SQL запроса.
Топ 10 популярных языков программирования
Скрипт на PHP для отслеживания изменений файлов
Одинарные кавычки в SQL запросе на Delphi или RAD Studio