mysql, mysqli & PDO

Panchous

Павел
mysql, mysqli & PDO

Доброго время суток, коллеги!

Хотелось бы узнать Ваше авторитетное мнение по следующим вопросам (речь идет о MySQL>=4.1 и PHP>=5.0):
  1. Кто чем пользуется и на что ориентируется в перспективе?
  2. Какое из расширений отличается в лучшую сторону по быстроте, стабильности и безопасности?
  3. В комментах юзеров для mysqli наткнулся на такую доку (MySQLi vs MySQL: http://www.johnjawed.com/benchmarks/):
    Conclusions
    The data showed that mysql_query outperforms mysqli_query head to head. For the specific task of inserting 100,000 rows into a table, using mysqli_multi_query more than doubled our script execution time. At this point, you may start wondering what the point of using MySQLi is if the traditional MySQL extension is getting the upper hand on MySQLi.

    However, using MySQLi statements we got better results, in fact it outperformed mysql_query by as much as mysql_query outperformed mysqli_query. Though this might not be enough reason for you to change existing code, remember that MySQLi statements are "pre-escaped", meaning that there is no need for you to do mysql_real_escape_string on any of the variables. It's apparent that given this fact about MySQLi statements, if we had made the extra function call of mysql_real_escape_string to the four inserted values, we would have greatly increased our execution time (good for character escaping user input, however, SQL injection is still an issue).

    While the above may not be enough reason to change existing code to use MySQLi statements, they might be good reasons to use them in the future, for both security and performance. In summary,

    mysqli_stmt > mysql_query > mysqli_query > mysqli_multi_query
    Хотелось бы узнать, насколько это отражает действительность.
  4. Что стоит использовать, ориентируясь на перспективу?
    Ведь не загорами появление PDO! Означает ли это, что остальные расширения будут считаться динозаврами?
    Т.е. стоит ли начинать сразу писать на PDO? Как скоро можно ЕГО ожидать? и на сколько сложно будет "поправить" скрипты, работающие с mysqli под PDO?
  5. Любая полезная информация (возможные "подводные камни", впечатления, [не]успешный опыт) по сабжу.
    [/list=1]
    Спасибо.

    PS:
    Раньше имел дело с MySQL4.0.х и пользовал mysql соответственно.
    Теперь предстоит новый проект на MySQL4.1 и php5 - вот и задался вышеописанными вопросами.
 

Макс

Старожил PHPClub
Ведь не загорами появление PDO!
чего ?
PDO, если мне память не изменяет, существует уже более года.

Насчет тестов
1.Во-первых, тестили только insert-запросы.
2. Во-вторых, разница в скорости mysql и mysqli особого значения не имеет. Это будут тысячные доли секунды.

MySQLi удобнее (по сравнения с mysql) хотя бы возможностью наследования и работы с исключениями.
 

Profic

just Profic (PHP5 BetaTeam)
MySQLi и правда удобнее, по крайней мере объектный интерфейс. Я для него написал обертку и ей пользовался до недавнего времени.

Недавно стал мучать PDO. Что порадовало: можно указать какой класс возвращать в результате query(), встроенная обработка ошибок через исключения, недавно попавшая в cvs возможность указывать какую секцию из my.cnf читать, более простой интерфейс - всего три класса, один из которых класс исключения. В результате обертка сильно уменьшилась в размерах, да в общем-то и не обертка это теперь, а что-то типа небольшого расширения.
 

Panchous

Павел
Profic, а что касается надежности PDO?
На сегодняшний день релиза этой либы нет ведь...
 

Profic

just Profic (PHP5 BetaTeam)
Panchous
Релиза нет, я ее недавно стал мучать, следовательно каких либо данных по стабильности у меня нет. Хотя вот нашел один глюк, c экперементальным патчем :), в очень экзотической ситуации :), возможно баг вообще не pdo, а libmysql. В общем пока использовал: exec(), query(), prepair()->execute(), setAttribute() + мелочевка - работают как и положено :).
ЗЫ. Мне собственно проще:
1) есть к кому пристать, если найду баг
2) могу пересобрать php с предложенным патчем или из cvs
 

Panchous

Павел
Profic, :)
Делаю вывод, что под винду затевать это дело просто опасно на данный момент...
остается mysqli.
 

Profic

just Profic (PHP5 BetaTeam)
Ну почему, php я под виндой пересобираю как раз :).
Другое дело, что если нужны какие-то специфические функции mysql, которых нет в PDO, то прямая дорога к mysqli. Во всех остальных случаях PDO имхо лучший выбор, имхо, из-за своей простоты.
 
Сверху