Страницы

Поиск по вопросам

пятница, 5 октября 2018 г.

Какой extention выбрать для работы с MySQL в PHP?

Насколько я знаю, существует mysql, mysqli и пр... Раньше я использовал mysql, но это было лет 5 назад. Сейчас ситуация существенно поменялась, и многие статьи рекомендуют использовать mysqli
Уважаемые знатоки PHP программирования, помогите опытом, чем же так хорош mysqli или может стоит использовать что-то другое?


Ответ

Расширение mysql официально признано устаревшим. Это означает, что нет гарантий его дальнейшей поддержки (в том числе и с точки зрения безопасности). Поэтому это расширение нельзя использовать ни в одном новом проекте.
Остается выбор между mysqli и PDO
Расширение mysqli
mysqli - это наиболее простая замена mysql. Большинство функций и методов mysqli имеют синтаксис, схожий с синтаксисом расширения mysql. Это позволяет достаточно просто переключится с одного расширения на другое. Например:
// mysql $link = mysql_connect(); $res = mysql_query('SELECT * FROM tbl', $link); var_dump(mysql_fetch_assoc($res));
// mysqli $link = mysqli_connect(); $res = mysqli_query($link, 'SELECT * FROM tbl'); var_dump(mysqli_fetch_assoc($res));
В тоже время, есть и ряд улучшений, связанных безопасностью (плейсхолдеры) и объектным подходом. Очевидный минус mysqli - привязка кода к работе с MySQL. В ряде случаев, это может затруднить переход к использованию других баз данных (если это конечно потребуется).
Расширение PDO
PDO представляет собой дополнительный уровень абстракции над базой данных. Теоретически, один и тот же PHP код может работать с любой SQL совместимой базой данных, если для нее есть соответствующий драйвер PDO. (На практике, проблема с различными БД все равно остается из за различий в синтаксисе SQL.) PDO проповедует объектный подход, поэтому и код будет существенно отличаться от кода с использованием mysql. Например:
// mysql $link = mysql_connect('localhost', 'user', 'pass'); mysql_select_db('testdb', $link); $res = mysql_query('SELECT * FROM tbl', $link); var_dump(mysql_fetch_assoc($res));
// PDO $dbh = new PDO('mysql:host=localhost;dbname=testdb', 'user', 'pass'); $stm = $dbh->prepare('SELECT * FROM tbl'); $stm->execute(); var_dump($stm->fetch(PDO::FETCH_ASSOC));
Помимо прочего, PDO предоставляет набор дополнительных возможностей, связанных с безопастностью (плейсхолдеры) и скоростью выполнения запроса (подготовленные запросы). Хотя этих возможностей нет mysql, часть из них реализована в mysqli
Резюмирую: в большинстве случаев, я бы рекомендовал использовать PDO, поскольку интерфейс работы с mysqli слишком низкоуровневый и часто требует создания собственного уровня абстракции над БД.

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

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