PDO

Dez

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

Еще почему думаю про это - потому что новый друпал 7 использует PDO,
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
синтаксис очень полезный, когда речь про ООП
 

Dez

Новичок
Я правильно понял, что pdo - это отдельная либа и она не использует для соединения mysql или mysqli либу, а сама поключается к базе. Вопрос тут в скорости именно, т.к. обертки не добавляют обычно скорости.
синтаксис очень полезный, когда речь про ООП
меня больше интересует практическая польза от использования. Реалии просто такие, что миграция из mysql в другие базы вряд ли мне нужна (пока как минимум).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
когда вопрос в скорости расширений на шаредах, надо пойти побиться головой ап стену
 

Фанат

oncle terrible
Команда форума
на мой взгляд, основные особенности ПДО (в порядке убывания полезности) это:
- поддержка нативных подготовленных выражений.
- объектный интерфейс (можно сделать свой класс, унаследовав его от ПДО), исключения
- поддержка различных СУБД
- попытка реализовать пару библиотечных функций, типа fetchAll - куцая и кривая

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

Поэтому если говорить о "практической пользе", то остаётся только одно: если заставить нуба все данные во все запросы передавать через препареды, это уменьшит вероятность инъекции. В остальном ничего такого, без чего нельзя было бы обойтись.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>fetchAll - куцая и кривая
мне она таковой не кажется


$stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, "MyClass", array('row_object_init_param'))->execute(array($param1,$paramN))->fetchAll();

Она просто плохо документирована
 

Фанат

oncle terrible
Команда форума
я имею в виду что набор хелперов в ПДО куцый.
fetchall есть, но она там одна-одинёшенька, в то время как нужна ещё куча - для инсеротв, апдейтов, и ещё десяток.

Запись которубю ты привёл, на самом деле ужасная. Так нельзя писать в коде.
Это надо переписывать на вызов хелпера в 10 раз короче.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
В коде стоит писать что-то вроде Posts::model()->findAll($Criteria); (ActiveRecord, yii) или $table->setRowClass('My_Row'); $table->fetchAll($condition); (Table Data Gateway, ZF)

но проблема есть, конечно, особенно в том, что объект PDOStatement получается из PDO:: prepare() как есть и расширить его уже нельзя, а mixin не предусмотрен
написать что-то вроде
$PDO->prepare($sql)->execute($params)->MyFetchWrapper->($fetchParams)
проблематично
 
Сверху