понедельник, 3 сентября 2012 г.

PHP расширение mysqli



mysqli (MySQL Improved Extension) — это одно из трёх API предоставляемых расширениями PHP для работы с MySQL (другие два это: mysql и PDO).

mysqli и PDO являются рекомендованными для новых проектов, в отличии от mysql которая считается устаревшей.

Представленные расширения для своей работы могут использовать одну из библиотек обеспечивающих необходимый протокол: mysqlnd или libmysql. mysqlnd новее (опять же рекомендована) и с версии PHP 5.3 распространяется вместе с ним.

mysqli по сравнению с mysql имеет следующие преимущества:
  1. ОО интерфейс (процедурный интерфейс тоже в наличии);
  2. поддержка неблокирующих, асинхронных запросов (с mysqlnd);
  3. поддержка подготовленных выражений (Prepared Statements) на стороне сервера;
  4. поддержка хранимых процедур;
  5. поддержка множественных запросов (Multiple Statements);
  6. поддержка транзакций;
  7. продвинутые возможности отладки;
  8. поддержка всей функциональности 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();

Комментариев нет:

Отправить комментарий