mysqli (MySQL Improved Extension) — это одно из трёх API предоставляемых расширениями PHP для работы с MySQL (другие два это: mysql и PDO).
mysqli и PDO являются рекомендованными для новых проектов, в отличии от mysql которая считается устаревшей.
Представленные расширения для своей работы могут использовать одну из библиотек обеспечивающих необходимый протокол: mysqlnd или libmysql. mysqlnd новее (опять же рекомендована) и с версии PHP 5.3 распространяется вместе с ним.
mysqli по сравнению с mysql имеет следующие преимущества:
- ОО интерфейс (процедурный интерфейс тоже в наличии);
- поддержка неблокирующих, асинхронных запросов (с mysqlnd);
- поддержка подготовленных выражений (Prepared Statements) на стороне сервера;
- поддержка хранимых процедур;
- поддержка множественных запросов (Multiple Statements);
- поддержка транзакций;
- продвинутые возможности отладки;
- поддержка всей функциональности MySQL 5.1+.
Как уже упоминал, mysqli поддерживает и ОО, и процедурный интерфейс. Разницы в производительности нет и выбор зависит от предпочтений. Далее я буду использовать ОО подход, так как применяю его, по возможности, и в ежедневной работе.
Подключение
Класс mysqli представляет собой подключение к БД, и среди свойств содержит следующие:
- $affected_rows — количество строк в результате последнего запроса;
- $connect_errno — код ошибки последнего подключения;
- $connect_error — описание ошибки последнего подключения;
- $errno — код ошибки последней вызванной функции;
- $error — описание последней ошибки;
- $insert_id — автоматически сгенерированный идентификатор использованный в последнем запросе.
Для подключения к базе используется конструктор:
new mysqli('host', 'user', 'pass', 'database', 'port');
Но, если необходимо установить какие-то опции подключения, то нужно использовать метод real_connect():
$mysqli = new mysqli(); $mysqli->options('option', 'value'); $mysqli->real_connect('host', 'user', 'pass', 'database');
Базовые запросы выполняются следующим образом:
$result = $mysqli->query('...'); $result->free(); $mysqli->close();
Результат запроса
Метод mysqli::query() при запросе, возвращающем значения, вернёт объект класса mysqli_result.
При помощи объекта mysqli_result можно получить записи которые выбрал запрос:
if ($result->num_rows) while ($row = $result->fetch_assoc()) { } $result->free();
Помимо классов mysqli и mysqli_result есть ещё:
- mysqli_stmt - подготовленное выражение (Prepared Statements);
- mysqli_driver – не документировано;
- mysqli_warning – не документировано;
- mysqli_sql_exception – не документировано.
В заключение полный пример базового использования mysqli:
$mysqli = new mysqli('localhost', 'root', '', 'test'); if ($mysqli->connect_error) exit('Connect error: "' . $mysqli->connect_error . '"'); $result = $mysqli->query('SELECT * FROM `test`') OR exit('Query error: "' . $mysqli->error . '"'); while ($row = $result->fetch_assoc()) { print_r($row); echo '<br />'; } $result->free(); $mysqli->close();
Комментариев нет:
Отправить комментарий