PHP тоже. Но мы же его используем. И отмывают его постепенно.Ну, в первую очередь потому, что ПДО - фигня на палочке и недоделка. Проще новых нарожать, чем этих отмыть.
Не было проблем.Ты не пробовал, кстати, наследовать ПДО? Увлекательное занятие.
Это все можно обернутьВ том-то и дело, что у ПДО нет нормального интерфейса. Все эти припарки-екзекюты-фетчи. Идея интерфейса как раз в том, чтобы весь этот мусор из кода вышвырнуть.
Сложный запрос через QB не построишь, либо потратишь гораздо больше времени.Absinthe
queryBuilder - фактически представляет обертку для запроса, а значит можно сделать например глобальные именованные параметры, которые определяются для всего запроса в целом
Слушай, а покажи, а? можно в личку. Я думал отэкстендить пдошечку, добавив в нее поддержку типизованных плейсхолдеров (правда, ценой перменентного включения режима эмуляции)Не было проблем.
Ну да, мы ж это уже обсуждали. просто там еще какие-то косяки полезли - я и забил.Фанат
__call. ну или просто делегирование, наследоваться, да, не очень удобно.
//как у меня сейчас - с переменным числом параметров
$data = $db->getCol("SELECT name FROM t WHERE id IN(?a)",array(1,2,3));
//и как в пдошечке - массивом
$data = $db->getCol("SELECT name FROM t WHERE id IN(?a)",array(array(1,2,3)));
//как у меня сейчас - с переменным числом параметров
$data = db('DbSimpleStyle')->getCol("SELECT name FROM t WHERE id IN(?a)",array(1,2,3));
//и как в пдошечке - массивом
$data = db('PdoStyle')->getCol("SELECT name FROM t WHERE id IN(?a)",array(array(1,2,3)));
//как у меня сейчас - с переменным числом параметров
$data = $db->setStyle('DbSimple')->getCol("SELECT name FROM t WHERE id IN(?a)",array(1,2,3));
//и как в пдошечке - массивом
$data = $db->setStyle('Pdo')->getCol("SELECT name FROM t WHERE id IN(?a)",array(array(1,2,3)));
или лучше под sql заточенный twigДля подобного как мне кажется нужен querybuilder, но простота библиотеки тогда уменьшается)
$data = $db->getCol("
selelt *
from {{users_table:identifier}}
where id={{user_id:int}}
", array('users_table'=>'users','user_id' => 42)
);
$data = $db->getCol("
selelt *
from (id)users_table
where id=(int)user_id
", array('users_table'=>'users','user_id' => 42)
);
use DbSimle\Type;
$db->newQuery('selelt *
from :users_table
where id=:user_id')
->set('users_table', 'users', Type::ID)
->set('user_id', 25, Type::INT)
$db->newQuery('selelt *
from :users_table
where id=:user_id')
->setId('users_table', 'users')
->setInt('user_id', 25)
$data = $db->getCol("SELECT name FROM t WHERE id IN(?a)",array(1,2,3));
здесь: http://php.net/manual/en/pdo.prepare.phpи где облом?![]()
захардкоденая зависимость классовPDO:: prepare() returns a PDOStatement object.
проблема в том, что это основная идея класса...лучше выкини такой шоткат: это такой классный способ выстрелить в ногу, что ну его нафиг
В обёртке это обходится декоратором.
Так вы даже не посмотрели строку на которую я вам ссылку дал
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('Doctrine\DBAL\Driver\PDOStatement', array()));
PS я-то думал проблема в том что нельзя использовать 1 ключ на несколько вставокPDO::ATTR_STATEMENT_CLASS: Задает пользовательский класс производный от PDOStatement. Атрибут нельзя использовать с PDO, использующими постоянные соединения. Принимает массив array(string classname, array(mixed constructor_args)).
а зачем?PS я-то думал проблема в том что нельзя использовать 1 ключ на несколько вставок
декоратор - то понятно, но надо чтобы класс наследовался от PDOStatement, иначе он не пройдет по typehinting, т.о. надо расширить PDOStatement и переопределить все его методы, чтобы сделать декоратор к PDOStatementВ обёртке это обходится декоратором.