Что лучше: mysql или mysqli или pdo (а также mysqli_real_escape_string или mysqli_prepare)?

Здравствуйте!

Использоваться будет MySQL и вряд ли когда-либо будет переход на другую базу данных.

mysql - устарел и не поддерживается;
mysqli - как я понял, рекомендуется разработчиками php;
pdo - по различным данным, немного медленнее mysqli, но есть свои плюсы, именованные плейсхолдеры, смена типа БД и др.

Я остановился на mysqli, но тут другой вопрос, что лучше использовать, по старинке mysqli_query+mysqli_real_escape_string или mysqli_prepare+mysqli_stmt_bind_param+mysqli_stmt_execute и т.д.

С точки зрения безопасности, конечно второй вариант лучше, но и первый, если быть внимательным, тоже не уступает в безопасности, зато, как я понял, экономится один запрос в базу данных (PREPARE).

Я делал тесты производительности с повтором одних и тех же запросов 50 раз, в запросе с limit 20 получаются результаты ~0.026 и ~0.032 соответственно, выиграл 1 вариант.

А с limit 200 получилось ~0.110 и ~0.100 соответственно, выиграл 2 вариант.

Запросов с малым количеством строк для вывода будет меньше, то есть получается 1 вариант, предпочтительнее... Выслушаю различные мнения. Спасибо!
  • Вопрос задан
  • 15962 просмотра
Пригласить эксперта
Ответы на вопрос 4
astrikovd
@astrikovd
Python Developer
Исходя из обширного опыта использования PDO - 3 вариант лучше. Потому что:

1. PDO работает с разными базами данных. В случае необходимости легко будет переключиться с mysql, например, на postgres.
2. Используя PDO вы забываете о SQL-инъекциях (по крайней мере 1-уровня).
3. Поверх PDO можно использовать ActiveRecord или DAO, что значительно сокращает время разработки конечного продукта.

Есть и другие достоинства, но эти, как мне кажется, наиболее весомы.
Ответ написан
ScorpLeX
@ScorpLeX
mysqli_prepare+mysqli_stmt_bind_param+mysqli_stmt_execute
А для запросов без параметров лучше использовать mysqli_query.
Ответ написан
Комментировать
nixischev
@nixischev
PHP backend developer
1. Из всего вышеперечисленного в сабже лучше PDO, т.к. он работает со многими БД, у него простой ОО-интерфейс, он довольно шустрый. MySQL (mysql_* команды) драйвер забудь как страшный сон, его давно уже не поддерживают, сделали вместо этого MySQLi. А MySQLi имеет 2 интерфейса - процедурный и ОО-шный, для меня он был некой переходной точкой от MySQL драйвера до PDO

2. Запросы напрямую через драйвер БД не делай! Для этого есть ORM и DB-врапперы, мне очень нравится у PHPixie - https://github.com/dracony/PHPixie-DB (его в принципе можно использовать и без фреймворка, просто как библиотеку, только немного переписать придется). После этого забудь про *_real_escape_string() и т.п.
Ответ написан
Лучше PDO.

MySQL - уже считается устаревшим, дальнейшее его использование сулит проблемы с поддержкой.
Mysqli побыстрее PDO, но у PDO есть одно весомое преимущество - в некоторых случаях можно делать несколько действий одним запросом. Это заявка на лидерство. Если скорость работы Mysqli и PDO отличаются на десятитысячные секунды, то 1 или 2 запроса отличаются на сотые секунды.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы