За последние 24 часа нас посетили 15814 программистов и 1636 роботов. Сейчас ищет 961 программист ...

php5 и mysqli

Тема в разделе "Прочие вопросы по PHP", создана пользователем danis12, 24 апр 2010.

  1. danis12

    danis12 Активный пользователь

    С нами с:
    27 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    До недавнего времени для работы с базой данных использовал написанный мной класс.
    Там есть всё: экранирование символов, обработка нескольких запросов и т.д.
    Но тут я прочитал о MYSQLI. И понял, что у меня написан велосипед (ну да, pear и др. тоже содержат классы для работы с дб, но пока своё работает, замена не нужна). Причём прочитал статью чуть ли не 2004 года.
    И там есть то что нужно - стиль ООП. Так почему же, по моим наблюдениям, MSYQLI не так популярен?!
    Ведь в разных статьях приводится плюсы в быстродействии mysqli по отношению к mysql. В чём фишка?
    СтОит ли переходить на mysqli??
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Это надо было сделать 6 лет назад.
     
  3. danis12

    danis12 Активный пользователь

    С нами с:
    27 сен 2009
    Сообщения:
    12
    Симпатии:
    0
    :D:D
    вот-вот. но все скрипты у меня работают, необходимости что-то менять нет. Хотя потихоньку перепишу работу с базой, наверное.
    век живи - век учись.
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Зависит от методики ваших наблюдений.
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    danis12
    не нужно, если вас все устраивает. Иногда mysqli нету. =) я о таком слышал. но не встречал...
     
  6. alexey_baranov

    alexey_baranov Активный пользователь

    С нами с:
    3 фев 2009
    Сообщения:
    647
    Симпатии:
    0
    Адрес:
    Сургут
    а что такое mysqli? я за PDO. Как в 2007 году его увидел, так и пользуюсь. И по-моему не ошибся, потому что потом узнал и доктрина через него работает и Zend_DB тоже. А это о чем- то говорит. Да и просто хорошо продуман. После него от .NET Data хочется плеваться.
     
  7. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    всё дерьмо, где нет типизированной подстановки в любую часть SQL
     
  8. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    +1, сам по себе mysqli - лишний объектный интерфейс. В простых скриптах проще пользоваться функциями mysql, в если у тебя какая-то доктрина другое *_DB то тебе как пользователю пофиг =)
     
  9. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а шо етсь типизированная подстановка?
     
  10. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    [vs]
    точно так же можно юзать mysqli_ функции. Не забывайте, что mysql считается устаревшей и ею никто не занимается, все фиксы идут в mysqli. Кстати PDO скорее всего забросят и уберут, т.к. не хватает ресурсов - вендоры не занимаются PDO, а больше своими модулями нативными. Так что учтите.

    З.Ы. Информация с листа рассылки internals
     
  11. iliavlad

    iliavlad Активный пользователь

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    Psih
    ты б рассказывал, чего там еще интересного происходит внутри пхп. если не сложно.
     
  12. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
  13. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Занимаются оптимизацией Zend Engine - результаты можно глянуть здесь: http://wiki.php.net/rfc/performanceimprovements - на данный момент патч ещё не полностью готов.

    Так же занимаются обсуждением Named parametrs: http://aspn.activestate.com/ASPN/Mail/M ... ev/3838386
     
  14. akrinel

    akrinel Активный пользователь

    С нами с:
    26 янв 2009
    Сообщения:
    955
    Симпатии:
    1
    Адрес:
    Spb
    Эээ а как же всякие там Doctrine, Propel и прочие eZDatabase? :'(
    Каждый напишет замечательную альтернативу?
     
  15. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    вообще сам по себе объектный интерфейс не лишний - все же удобнее чем таскать ресурс от функции к функции, также можно перегружать методы - вообщем всё что дает ООП это лучше. Ну пусть еще, может когда то я всё же проверю и поверю что mysqlnd намного лучше чем libmysql, ну это я так приплёл чуть )) Вообщем кроме объектного интерфейса, мультиквери и улучшенным обменом данных я не вижу больше плюсов...
     
  16. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Какая разница, что таскать ресурс или объект, все равно переменная.
    Другое дело инкапсуляция...

    вообще сам по себе объектный интерфейс не лишний - все же удобнее чем таскать ресурс от функции к функции,

    Это то чего мне отчаянно не хватает в PHP - перегрузки методов...
    Да, я понимаю, что здесь, скорее всего, имелся ввиду полиморфизм "полиморфизм".

    Транзакции?
     
  17. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    лучше явно
    [sql]BEGIN[/sql]
     
  18. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    [vs]
    Почему?
    По моему:
    PHP:
    1. <?php
    2. try{
    3.     $db->startTransaction();
    4.     $db->insert("some insert");
    5. //    some logic
    6. //  logic
    7. //logic
    8. //logic
    9.     $db->update("some update");
    10. //    some logic
    11. //  logic
    12. //logic
    13. //logic
    14.     $db->delete("some delete");
    15.     $db->commit();
    16. }catch (Exception $e){
    17.     $db->rollback();
    18. }
    19.  
    Более наглядно, чем:
    PHP:
    1. <?php
    2. try{
    3.     $db->query("BEGIN");
    4.     $db->insert("some insert");
    5. //    some logic
    6. //  logic
    7. //logic
    8. //logic
    9.     $db->update("some update");
    10. //    some logic
    11. //  logic
    12. //logic
    13. //logic
    14.     $db->delete("some delete");
    15.     $db->query("COMMIT");
    16. }catch (Exception $e){
    17.     $db->query("ROLLBACK");
    18. }
    19.  
     
  19. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    блин, точно - забыл ))
    да, тоже ступил, но имеется в виду переопределение родительских методов
     
  20. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    По поводу mysqlnd - однозначно лучше по той простой причине, что его архитектура отличается от стандартного драйвера в лучшую сторону - нету двойного копирования данных: жрёт меньше памяти и работает быстрее. + есть вещи, которые доступны только для mysqlnd драйвера и через старый mysql драйвер доступны не будут.
     
  21. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Какие такие методы ты не можешь перегрузить(и что ты вообще понимаешь под этим) в динамическом языке?
     
  22. Костян

    Костян Активный пользователь

    С нами с:
    12 ноя 2009
    Сообщения:
    1.724
    Симпатии:
    1
    Адрес:
    адуктО
    Psih
    я согласен с тем что ты сказал, я тоже читал эту штуку, но мне кажется, что на маленьких запросах он медленнее, чем libmysql ...
     
  23. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    например, insert в классе работы с БД.
    Когда один аргумент, то это запрос.
    Когда несколько, то таблица и массив для вставки.
    Могу, но усложняется логика.
    Можно сделать один метод с максимумом параметров и смотреть что пришло, а что нет, можно шаманить с func_num_args(), func_get_arg(), func_get_args(), можно проверять тип аргументов.
    Два метода с одинаковым именем, но разным количеством параметров, как минимум.
    Если использовать типизированные параметры, то тоже что и в строго типизированных языках.
     
  24. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    PHP:
    1.  
    2. <?php
    3. public insert($sql, $params = null) {
    4.     if ($params) {
    5.         $query = $this->quoteInto($sql, $params);
    6.     } else {
    7.         $query = $sql;
    8.     }
    9.  
    10.     return $this->query($query);  
    11. }
    12.  
    13.  
    можно вообще так
    PHP:
    1. <?php
    2. public function insert() {
    3.     switch (func_num_args ()) {
    4.         case $value:
    5.             break;
    6.         default:
    7.             break;
    8.     }
    9. }
    10.  
    Какой еще перегрузки не хватает в PHP?
     
  25. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Запомните простую вещь. Перегрузка в таких языках как PHP существует по-дефолту для любой функции просто потому что параметры нетипизированы.