До недавнего времени для работы с базой данных использовал написанный мной класс. Там есть всё: экранирование символов, обработка нескольких запросов и т.д. Но тут я прочитал о MYSQLI. И понял, что у меня написан велосипед (ну да, pear и др. тоже содержат классы для работы с дб, но пока своё работает, замена не нужна). Причём прочитал статью чуть ли не 2004 года. И там есть то что нужно - стиль ООП. Так почему же, по моим наблюдениям, MSYQLI не так популярен?! Ведь в разных статьях приводится плюсы в быстродействии mysqli по отношению к mysql. В чём фишка? СтОит ли переходить на mysqli??
вот-вот. но все скрипты у меня работают, необходимости что-то менять нет. Хотя потихоньку перепишу работу с базой, наверное. век живи - век учись.
danis12 не нужно, если вас все устраивает. Иногда mysqli нету. =) я о таком слышал. но не встречал...
а что такое mysqli? я за PDO. Как в 2007 году его увидел, так и пользуюсь. И по-моему не ошибся, потому что потом узнал и доктрина через него работает и Zend_DB тоже. А это о чем- то говорит. Да и просто хорошо продуман. После него от .NET Data хочется плеваться.
+1, сам по себе mysqli - лишний объектный интерфейс. В простых скриптах проще пользоваться функциями mysql, в если у тебя какая-то доктрина другое *_DB то тебе как пользователю пофиг =)
[vs] точно так же можно юзать mysqli_ функции. Не забывайте, что mysql считается устаревшей и ею никто не занимается, все фиксы идут в mysqli. Кстати PDO скорее всего забросят и уберут, т.к. не хватает ресурсов - вендоры не занимаются PDO, а больше своими модулями нативными. Так что учтите. З.Ы. Информация с листа рассылки internals
Занимаются оптимизацией Zend Engine - результаты можно глянуть здесь: http://wiki.php.net/rfc/performanceimprovements - на данный момент патч ещё не полностью готов. Так же занимаются обсуждением Named parametrs: http://aspn.activestate.com/ASPN/Mail/M ... ev/3838386
Эээ а как же всякие там Doctrine, Propel и прочие eZDatabase? :'( Каждый напишет замечательную альтернативу?
вообще сам по себе объектный интерфейс не лишний - все же удобнее чем таскать ресурс от функции к функции, также можно перегружать методы - вообщем всё что дает ООП это лучше. Ну пусть еще, может когда то я всё же проверю и поверю что mysqlnd намного лучше чем libmysql, ну это я так приплёл чуть )) Вообщем кроме объектного интерфейса, мультиквери и улучшенным обменом данных я не вижу больше плюсов...
Какая разница, что таскать ресурс или объект, все равно переменная. Другое дело инкапсуляция... вообще сам по себе объектный интерфейс не лишний - все же удобнее чем таскать ресурс от функции к функции, Это то чего мне отчаянно не хватает в PHP - перегрузки методов... Да, я понимаю, что здесь, скорее всего, имелся ввиду полиморфизм "полиморфизм". Транзакции?
[vs] Почему? По моему: PHP: <?php try{ $db->startTransaction(); $db->insert("some insert"); // some logic // logic //logic //logic $db->update("some update"); // some logic // logic //logic //logic $db->delete("some delete"); $db->commit(); }catch (Exception $e){ $db->rollback(); } Более наглядно, чем: PHP: <?php try{ $db->query("BEGIN"); $db->insert("some insert"); // some logic // logic //logic //logic $db->update("some update"); // some logic // logic //logic //logic $db->delete("some delete"); $db->query("COMMIT"); }catch (Exception $e){ $db->query("ROLLBACK"); }
По поводу mysqlnd - однозначно лучше по той простой причине, что его архитектура отличается от стандартного драйвера в лучшую сторону - нету двойного копирования данных: жрёт меньше памяти и работает быстрее. + есть вещи, которые доступны только для mysqlnd драйвера и через старый mysql драйвер доступны не будут.
Какие такие методы ты не можешь перегрузить(и что ты вообще понимаешь под этим) в динамическом языке?
Psih я согласен с тем что ты сказал, я тоже читал эту штуку, но мне кажется, что на маленьких запросах он медленнее, чем libmysql ...
например, insert в классе работы с БД. Когда один аргумент, то это запрос. Когда несколько, то таблица и массив для вставки. Могу, но усложняется логика. Можно сделать один метод с максимумом параметров и смотреть что пришло, а что нет, можно шаманить с func_num_args(), func_get_arg(), func_get_args(), можно проверять тип аргументов. Два метода с одинаковым именем, но разным количеством параметров, как минимум. Если использовать типизированные параметры, то тоже что и в строго типизированных языках.
PHP: <?php public insert($sql, $params = null) { if ($params) { $query = $this->quoteInto($sql, $params); } else { $query = $sql; } return $this->query($query); } можно вообще так PHP: <?php public function insert() { switch (func_num_args ()) { case $value: break; default: break; } } Какой еще перегрузки не хватает в PHP?
Запомните простую вещь. Перегрузка в таких языках как PHP существует по-дефолту для любой функции просто потому что параметры нетипизированы.