Страницы

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

воскресенье, 1 декабря 2019 г.

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

#php #mysql #mysqli


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

Уважаемые знатоки PHP программирования, помогите опытом, чем же так хорош mysqli
или может стоит использовать что-то другое?
    


Ответы

Ответ 1



Расширение 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 слишком низкоуровневый и часто требует создания собственного уровня абстракции над БД.

Ответ 2



Выбор очень прост. Если ты понимаешь необходимость использования дополнительного уровня абстракции над низкоуровневыми функциями доступа к БД, и в состоянии написать такой, то надо использовать mysqli. В противном случае единственно правильным выбором будет PDO. В любом случае, главой ошибкой будет, если сменив экстеншен ты сохранишь старый подход, добавляя переменные в запрос напрямую. Единственная причина, по которой надо переходить на новые экстеншены - это использование подготовленных выражений. Иначе смысла переходить нет - гуано-кодить можно продолжать и на старом экстеншене. В свете вышесказанного не надо обманываться видимой легкостью перехода на mysqli. Работа с подготовленными выражениями никакого аналога в mysql не имеет, и, следовательно, никакой "простоты" при переходе не предоставляет.

Ответ 3



Если у тебя весь проект реализован на классах я бы рекомендовал смотреть в сторону Doctrine 2 если нет тогда PDO. Есть мнение что mysqli это низкоуровневой расширения, которое должно использоваться для написания библиотек.

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

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