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