RealAdmin.ru

Подключение к базе данных в PHP через PDO, MySQL и MySQLi

SQL,PHP
Категория: Кодинг
04 Дек 2016 г. в 14:35

Прежде чем подключиться к 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, $connect);
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% хостинговых площадках.

phpinfo

Одной из важных особенностей является наличие объектно-ориентированного интерфейса. То есть, если раньше все работы с базой данных осуществлялись при помощи интерфейса функций, то теперь можно использовать оба подхода. Рассмотрим пример подключения к базе данных через 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

У PDO есть свой механизм соединения с базой данных — DSN. Кроме основных параметров, он должен принять тип базы данных. Посмотрим пример подключения.

$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 запроса.

Теги:
SQL
PHP
Посмотрите похожее — 5
Комментарии — 0
    © REALADMIN.RU   2017 г.
    Страница сгенерирована: 0,1020 s | 10 mb.
    На каком уровне Вы играете в шахматы?
    О П Р О С
    Home Question Top