MySQLi – новая версия расширения MySQL
Добрый день, уважаемые читатели. Сегодня я хочу вам рассказать о такой вещи, как новое расширение для работы с СУБД – MySQLi. Данное расширение существует уже на протяжении долгого времени, и несет на своем борту много полезных и новых возможностей, по сравнению со старой версией расширения – MySQL. Но по моей собранной статистике не многие разработчики используют новое расширение вместо старого.
Лично я в своих разработках, всегда использую MySQLi, так как он работает немного быстрее и безопаснее по сравнению с MySQL. Расширение MySQLi совместимо только с версиями MySQL 4.1 и выше. Для более старых версий MySQL , по-прежнему придется использовать старое расширение.
И так, в чем же отличие нового расширение от старого.
На первый взгляд расширение MySQLi очень похоже на старую версию расширения. Большинство функций, которые доступны в старом расширении, также доступны и в новом расширении. Первое отличие от MySQL это то, что немного изменились названия функций. Например, вместо функции mysql_query() старого расширения, в новом расширении используется функция mysqli_query(). Если говорить по-простому, то в названиях функций вместо слова mysql используется слово mysqli.
Так же в новом расширении исчезло такое понятие как “соединение по умолчанию”. То есть, в старом расширении, в запросах не нужно было явно указывать соединение с базой данных, но в новом расширении, теперь нужно в каждом запросе указывать идентификатор соединения с базой данных, который передается первым параметром.
Вот отличия MySQLi от MySQL.
1. Поддержка двойного синтаксиса: функциональный и объектно-ориентированный.
2. Поддержка подготовленных операторов.
3. Поддержка транзакций.
4. Поддержка множественных запросов.
5. Расширенная поддержка отладки.
6. Встроенная серверная поддержка.
Для начала я вам покажу, как подключаться к базе данных по-новому.
Синтаксис функции подключения к базе выглядит следующим образом:
mysqli_connect($hostname,$username,$password,$database,$port,$socket);
параметры $port и $socket, являются необязательными.
Пример процедурного стиля:
$load= mysqli_connect("localhost","username","password","database", 3306);
Пример объектно-ориентированного стиля:
$load= new mysqli("localhost","username","password","database", 3306);
С переменными, которые передаются в функцию mysqli_connect, думаю вам все понятно.
Теперь посмотрим, как выполнять запросы и получать данные в каждом из стилей.
Пример процедурного стиля:
$load= mysqli_connect("localhost","username","password","database", 3306);
$result= mysqli_query($load, "SELECT username FROM table WHERE id='1'");
$row=mysqli_fetch_array($result);
echo $row['username'];
Как видно из примера в функцию mysqli_query передается идентификатор подключения $load. Ну а формат самого запроса остался без изменений.
Пример объектно-ориентированного стиля:
$load= new mysqli("localhost","username","password","database", 3306);
$result=$load->query("SELECT username FROM table WHERE id='1'");
$row=$result->fetch_array();
echo $row['username'];
Как видно из примера идентификатор подключения $load в самой функции не передается, а передается только в названии функции – $load->query.
Также нужно знать, что результат запроса сохраняется в памяти до тех пор, пока скрипт выполнивший этот запрос, не завершит свою работу. Это нормально в большинстве случаев, но когда вы работаете с запросами, которые возвращают большие наборы данных, необходимо освобождать память, занимаемую результатом запроса. Для этого в MySQLi существует функция – mysqli_free_result().
Пример использования этой функции в процедурном стиле:
$load= mysqli_connect("localhost","username","password","database", 3306);
$result= mysqli_query($load, "SELECT username FROM table WHERE id='1'");
$row=mysqli_fetch_array($result);
echo $row['username'];
mysqli_free_result($result);
Пример использования этой функции в объектно-ориентированном стиле:
$load= new mysqli("localhost","username","password","database", 3306);
$result=$load->query("SELECT username FROM table WHERE id='1'");
$row=$result->fetch_array();
echo $row['username'];
$result->close();
Вот в принципе все основные моменты работы с MySQLi. В следующих постах я буду подробнее рассматривать каждую из функций.
Подводя итоги, хочется сказать, что стабильность у MySQLi стала выше в разы по сравнению с MySQL, так как появилась возможность использовать транзакции. Хотя транзакции были и MySQL, но работы с ними стала возможной только в MySQLi. Также работа с подготовленными операторами дала возможность обезопасить свои данные от SQL – инъекций. На счет быстродействия, я тестировал web приложения на двух расширениях, выигрыш у MySQLi не очень велик, но при большом объеме данных , с которыми придется работать, выигрыш будет заметен.


ЭЭЭ… странно, что значит новое???
Новое – значит для тех кто не использует его, и то что оно действительно новое, ему не так много времени как MySQL
Спасибо, познаватеьно.
Подскажите Господа пожалуйста, ото запамятовал. Как сделать запрос типа «Дай все записи у который поле «lvl» будет больше 5?
id – тут можешь указать по какому полю сортировать.