Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: PHP, MYSQL, MySQLi и PDO
 
 автор: Jaroslav   (12.01.2014 в 12:25)   письмо автору
 
 

Добрый день.
Прочитал кучу статей, посмотрел синтаксис, возможности MYSQL, MySQLi и PDO и так и не понял, какие конкретно преимущества у MySQLi перед MYSQL? Помимо мнимой «безопасности» и возможностей ООП, которые на большинстве проектов не нужны. Стоит ли существующие (старые) проекты, которые годами успешно работают на MYSQL переводить на MYSQLi? Что делают гиганты в данной отрасли типа google, facebook, сервисы mail.ru и.т.д. Они будут все коды переписывать? Я лично считаю, что единственное, ради чего стоило бы переписывать – это ради перехода на новые версии PHP, в которых уделяется внимание вопросам безопасности и производительности. Основной вопрос, собственно, по PHP.

- Подскажите, пожалуйста, с какого это перепуга разработчики PHP решили с версии PHP5.5 отказаться от поддержки MYSQL? Как по мне, реальные проекты на MYSQL (конкретно типовые операции выборки, удаления, обновления записей из базы данных) будут работать пошустрее, чем на MYSQLi. Или по крайне мере не медленнее. Так смысл тогда переписывать?

С уважением .

  Ответить  
 
 автор: Valick   (12.01.2014 в 15:14)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 12:25)
 

Прочитал кучу статей
судя по тому что вы тут написали, вы не прочитали, а бегло пробежались не понимая о чем реч.
Во первых запомните раз и навсегда, есть база данных MySQL (точка)
Из РНР с СУРБД можно работать с помощью драйверов mysql_ , mysqli_ и PDO (у этой библиотеки вроде как с недавних пор свой драйвер работы с MySQL, а до этого, вы не поверите был mysqli, и суть этой библиотеки отделить логику кода на РНР от какой-то конкретной БД, т.е. программе на РНР все равно какая БД будет использоваться)
драйвер mysql_ просто устарел и поэтому его уберут, на его смену пришел драйвер mysqli_ (еще в 2007 году!!!) который помимо процедурного стиля поддерживает стиль ООП.

  Ответить  
 
 автор: Jaroslav   (12.01.2014 в 15:58)   письмо автору
 
   для: Valick   (12.01.2014 в 15:14)
 

"просто" - ничего не бывает. Не понял, чем mysqli_ лучше mysql_?
И стоит ли переписывать проекты, которые с 2005-2006-го года нормально работают буз mysqli_?
Какой смысл? Какие конкретные преимущества будут? Сегодня у них mysqli_ , завтра появится mysqlX_, а от mysqli_ - откажутся в версии PHP5.6. Что, переписывать каждый раз под них? Почему нельзя было дорабатывать mysql? Неужели вы думаете, что mysqli_ - был создан с нуля?

  Ответить  
 
 автор: Valick   (12.01.2014 в 16:21)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 15:58)
 

вы ботинки новые покупаете, и ли старые постоянно ремонтируете?
на самом деле грамотно написаный код не составляет труда перевести с mysql_ на mysqli_
хотите пререписывайте, хотите нет, вас никто не будет ждать

  Ответить  
 
 автор: Jaroslav   (12.01.2014 в 18:26)   письмо автору
 
   для: Valick   (12.01.2014 в 16:21)
 

Если на процедурный mysqli_, то.. может быть. А если на ООП?
И вообще если уж использовать mysqli_, то как лучше? Сразу на ООП или это дело вкуса?
Плохо, когда выбор есть... )

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:45)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 18:26)
 

Если вы пищете на ООП, то вы не будете использовать процедурный MySQLi.
Если возникает такой вопрос, значит у вас процедурные приложения.
Если у вас нет проблем и рефакторить вы ничего не планируете, то и не парьтесь.

  Ответить  
 
 автор: Yuriev   (12.01.2014 в 17:12)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 15:58)
 

Увы, или переписывать каждый раз, или держать свой сервер со старыми версиями программ

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:46)   письмо автору
 
   для: Yuriev   (12.01.2014 в 17:12)
 

VPS стоит копейки, если что. И держите на нем что хотите.

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:41)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 15:58)
 

> И стоит ли переписывать проекты, которые с 2005-2006-го года нормально работают буз mysqli_?
Если не собираетесь менять код и версию ПХП - смысла нет

  Ответить  
 
 автор: psychomc   (12.01.2014 в 16:49)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 12:25)
 

>Они будут все коды переписывать?
они то не будут, а вот вам, с таким отношением к ооп, видимо придется

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:48)   письмо автору
 
   для: psychomc   (12.01.2014 в 16:49)
 

У них вообще мускул только урывками встречается. И уж тем более пхп. И уж тем более зависимость связки мускул+пхп

  Ответить  
 
 автор: antf   (14.01.2014 в 18:38)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 12:25)
 

До сих пор пользуюсь mysql. Никто не знает есть ли хорошие статьи или лучше книги, где бы описывалось расширение mysqli? Я нашел небольшую статью и мануал. Этого недостаточно.

  Ответить  
 
 автор: psychomc   (14.01.2014 в 18:59)   письмо автору
 
   для: antf   (14.01.2014 в 18:38)
 

лучше pdo

  Ответить  
 
 автор: Valick   (14.01.2014 в 19:21)   письмо автору
 
   для: psychomc   (14.01.2014 в 18:59)
 

чем лучше?

  Ответить  
 
 автор: psychomc   (14.01.2014 в 21:42)   письмо автору
 
   для: Valick   (14.01.2014 в 19:21)
 

новее, актуальнее. сменить субд, в случае чего, можно будет достаточно просто. а еще в pdo есть именованные параметры

  Ответить  
 
 автор: Jaroslav   (15.01.2014 в 12:59)   письмо автору
 
   для: psychomc   (14.01.2014 в 21:42)
 

Можно, подумать, что "в случае чего" - происходит каждый день.
pdo - работает медленнее, чем mysql_ или mysqli_
Самая шустрая база данных - mysql. Как по мне, лучше с mysql_ переходить на mysqli_
Только пока в раздумьях, на процедурный стиль или ООП.

  Ответить  
 
 автор: Valick   (15.01.2014 в 13:18)   письмо автору
 
   для: Jaroslav   (15.01.2014 в 12:59)
 

процедурного стиля там все меньше и меньше

  Ответить  
 
 автор: psychomc   (15.01.2014 в 14:28)   письмо автору
 
   для: Jaroslav   (15.01.2014 в 12:59)
 

можно подумать, что ~2.5% для обычных запросов и ~6.5% для подготовленных выражений в производительности вы хоть как-то почувствуете. гораздо важнее делать правильную нормализацию, расставлять правильно индексы и составлять грамотно запросы. вот что действительно может сильно сказаться на результате

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:53)   письмо автору
 
   для: Jaroslav   (15.01.2014 в 12:59)
 

> pdo - работает медленнее, чем mysql_ или mysqli_
> Самая шустрая база данных - mysql.
Вы так и не усвоили, что говорите о драйверах доступа к одной и той же СУБД.
Все трое - это MySQL (в данном конкретном случае). Вопрос только как к ней обращаться.

> Самая шустрая база данных - mysql.
А это вообще у меня вызывает таааааакие сомнения.....

  Ответить  
 
 автор: Саня   (30.05.2014 в 20:06)   письмо автору
 
   для: Sfinks   (29.05.2014 в 21:53)
 

Скорее всего имелось ввиду что оверхед реализации PDO выше, чем mysqli. Возможно это и так из-за большей абстрагированности и эмуляции фич, но на практике об этом стоит беспокоиться в самую последнюю очередь.

Что касается производительности СУБД, то, пока не реализуешь свой проект для разных СУБД и не посмотришь поведение на продакшене, завяления в стиле "mysql решает" и "что-то сомневаюсь" абсолютно беспочвенны и стоит игнорировать как холиварные.

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:49)   письмо автору
 
   для: psychomc   (14.01.2014 в 21:42)
 

> сменить субд, в случае чего, можно будет достаточно просто
Вы вот каждую неделю СУБД меняете??? Это мифический плюс.

  Ответить  
 
 автор: psychomc   (29.05.2014 в 22:19)   письмо автору
 
   для: Sfinks   (29.05.2014 в 21:49)
 

дело не в том, насколько часто меняю я, а в том, что это еще одно очевидное преимущество pdo по сравнению с другими.

  Ответить  
 
 автор: Саня   (30.05.2014 в 20:09)   письмо автору
 
   для: Sfinks   (29.05.2014 в 21:49)
 

Если вы разрабатываете библиотеку и не можете заранее предугадать какая СУБД будет у пользователей, то абстрагированность PDO сложно переоценить в таком случае.

  Ответить  
 
 автор: antf   (15.01.2014 в 15:56)   письмо автору
 
   для: antf   (14.01.2014 в 18:38)
 

Вот статья по mysqli на английском языке, правда тут рассматривается исключительно ООП-вариант.

  Ответить  
 
 автор: Саня   (24.01.2014 в 20:43)   письмо автору
 
   для: Jaroslav   (12.01.2014 в 12:25)
 

Расширение mysql не развивается ещё со времени выхода mysql 4.1. Соответственно, новый функционал не добавляется, баги не фиксятся. Не понимаю, почему они тянут аж до 5.5, когда его можно было выпилить уже в 5.3.
Даже когда исчезнет это расширение, старый код, использующий его, всё равно можно будет запустить. Нужно просто самостоятельно реализовать mysql_* функции и под капотом использовать PDO/mysqli.

Mysqli реализует большое количество новых фич mysql, активно поддерживается сообществом. В теории, дебажить с этим расширением проще из-за наличия нескольких дебаг функций. Развитое API.

PDO ориентирован на переносимость. Если одновременно используется несколько различных СУБД, проще воспользоваться абстракцией PDO. Так же с PDO проще переехать на новую СУБД. По этим причинам на нём обычно останавливаются создатели публичных библиотек общего назначения, типа doctrine, yii и т.п. Так же PDO проще в использовании, чем mysqli.

В общем, не имеет большого значения какое расширение использовать. Лично я выбрал PDO. С ним код получается проще и понятнее (а это облегчает дальнейшую поддержку). Но даже в этом случае, я пользуюсь обёрткой над PDO - добавляю таким образом нужные мне фишки и абстрагируюсь от mysql слоя. При таком подходе уже в принципе не важно какое расширение используется. Все детали инкапсулируются обёрткой и легко можно заменить одно расширение на другое, не трогая весь остальной код.

Компании уровня mail.ru и facebook не пользуются соединениями к БД напрямую. Почти наверняка есть ещё один абстрактный слой, который подгоняется под требования и задачи компании. Например, ни один из драйверов не способен прозрачно для остального кода перепослать запрос на запасной сервер, если основной отказал.

  Ответить  
 
 автор: confirm   (27.01.2014 в 03:11)   письмо автору
 
   для: Саня   (24.01.2014 в 20:43)
 

Не понимаю, почему они тянут аж до 5.5, когда его можно было выпилить уже в 5.3.

Предыстория. Когда-то давно, когда еще деревья были большими делалось два небольших проекта под Денвер, под версии 5.4, использовалось расширение mysql, причем размещение их в папках www. Затем, спустя время, при переходе на OpenServer, эти проекты были перенесены тоже на него, но помещены скрипты были без вложения в папки www.

Требовалась разработка под v.5.5, а в OS был подключен РНР 5.6. И тут возникла потребность вернуться к проектам старым, результат:

Один из проектов (назовем его 1, так как он более ранний был) выдавал в итоге 403.
Второй проект без проблем работал, то есть никаких ошибок, даже по поводу mysql, нет.

После переноса проекта 1 в папку www он стал реагировать на запросы, но с ошибкой о "древности mysql" сразу на стадии подключения.

Так и не понял причину 403, так и не понял почему на mysql_connect() для проекта 1 получаем логичное предупреждение, а для второго нет проблем. Если говорить о какой-то разнице между проектами в плане базы, то это только cp1251 у первого, и UTF у второго. Вот и думаешь чей тут баг и что за интересная ситуация.

  Ответить  
 
 автор: Саня   (19.05.2014 в 14:57)   письмо автору
 
   для: Саня   (24.01.2014 в 20:43)
 

Jaroslav, обёртка — функция или класс, инкапсулирующие работу с базой. Новый уровень абстракции.

Пример:
<?
class Db {

  protected 
$_dsn;
  protected 
$_username;
  protected 
$_passwd;
  protected 
$_options;

  protected 
$_pdo;

  public function 
__construct($dsn$username null$passwd null, array $options null) {
    
$this->_dsn $dsn;
    
$this->_username $username;
    
$this->_passwd $passwd;
    
$this->_options $options;
  }

  public function 
getConnection() {
    if ( !
$this->_pdo ) {
      
$this->_pdo = new PDO($this->_dsn$this->_username$this->_passwd$this->_options);
    }
    return 
$this->_pdo;
  }

  public function 
query($sql) {
    return 
$this->getConnection()->query($sql);
  }

}

В данном примере используется техника lazy initialization.

Обёртки могут быть простые (как в моём примере), так и монстры уровня doctrine. Обычно их строят для абстрагирования от используемых внутри инструментов и для дополнения недостающей функциональности. Например, в мой пример можно легко добавить контроль длительности запросов.

PS
Jaroslav, по электронной почте не консультирую. Пишите сразу сюда, на форум.

  Ответить  
 
 автор: lgar   (20.05.2014 в 21:08)   письмо автору
 
   для: Саня   (19.05.2014 в 14:57)
 

Не лучше Singleton в примере перенести в конструктор?

  Ответить  
 
 автор: psychomc   (20.05.2014 в 21:25)   письмо автору
 
   для: lgar   (20.05.2014 в 21:08)
 

не лучше

  Ответить  
 
 автор: Саня   (21.05.2014 в 22:42)   письмо автору
 
   для: lgar   (20.05.2014 в 21:08)
 

Тут не используется singleton.

  Ответить  
 
 автор: lgar   (22.05.2014 в 16:28)   письмо автору
 
   для: Саня   (21.05.2014 в 22:42)
 

Ну, я имел виду нижеследующий код, хотя, согласен, в определении ошибся.


if ( !$this->_pdo ) {
      $this->_pdo = new PDO($this->_dsn, $this->_username, $this->_passwd, $this->_options);
    }
    return $this->_pdo; 

  Ответить  
 
 автор: Саня   (28.05.2014 в 14:00)   письмо автору
 
   для: lgar   (22.05.2014 в 16:28)
 

В этом коде и содержится вся суть отложенной инициализации.

Можно один раз в конфиге инициализировать эту обёртку и в дальнейшем использовать её везде. Если получится так, что все нужные для построения страницы данные будут получены из кеша и не будет совершено ни одного запроса к базе, то мы сэкономим время и ресурсы, необходимые на установление соединения к бд.

  Ответить  
 
 автор: Sfinks   (29.05.2014 в 21:56)   письмо автору
 
   для: Саня   (24.01.2014 в 20:43)
 

Тогда уж проще не лезть в нативный ПХП и уж тем более не вдаваться в тонкости доступа и функций, а просто взять цмс с готовой орм.

  Ответить  
 
 автор: Саня   (30.05.2014 в 20:12)   письмо автору
 
   для: Sfinks   (29.05.2014 в 21:56)
 

Далеко не всегда нужна тяжелая артиллерия. Тем более все они, в конце концов, написаны на нативном php.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования