quoteIdentifier() in PDO

Absinthe

жожо
Чувствую себя идиотом, но в текущем проекте первый раз работаю с pdo и не могу найти в нем quoteIdentifier метод. Посмотрел доки - не подходит ни один параметр для quote.

Посмотрел багтрекер PHP - такая ошибка имеется: https://bugs.php.net/bug.php?id=38196

Как с такой задачей справляются пользователи pdo?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вообще, если у тебя данные попадают запрос откуда-то извне, вместо того, что бы быть вписанными руками в запрос с нужными кавычками — это уже как-бы звоночек, что ты что-то делаешь не лучшим способом, потому что опасность от подмены имени столбца очень большая.
Если ты пишешь какую-то унифицированную ODM или ORM обертку — тебе все равно надо будет разницу в синтаксисе описывать, т.к. PDO этого не умеет, ну и написать для каждого драйвера свою — не очень сложная задача.
Конечно, если бы оно было из коробки — было бы прекрасно, но его нет, насколько я знаю.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Кусочек из моего Database\Driver\PDO\Mysql.php (которым я уже не пользуюсь, к сожалению)
PHP:
public function quoteKeyword($value)
    {
        if ($value instanceof Database_Expression) return $value;
        if (strpos($value, '.') !== false)
        {
            $parts = explode('.', $value);
        } else {
            $parts = array($value);
        }
        $quoted = array();
        foreach ($parts as $part)
        {
            $quoted[] = '`'.$part . '`';
        }
        return implode('.', $quoted);
    }
 

Absinthe

жожо
флоппик как бы я и делаю обертку над PDO. Адаптер.
Интерфейс запросов один, интерфейс pdo другой.

Ищу реализацию данного метода.

Причины реализации: глупое требование проекта на запрет классов ZF(там есть адаптер для pdo).
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну, вдруг кто-то еще прочтет этот ответ, и поймет, что он делает неправильно, беря имена полей из строки запроса ;)
Запрет на какие-то фреймворки обычно делается с целью унификации, потому что ты думаешь о своем удобстве, а те кто проектирует и выставляет требования — в том числе и о удобстве других, и таких вещах, как уровень ЗП при найме других людей в этот проект... причин на самом деле может быть много, и вопрос рентабельности не менее важен.

Ну, а реализацию под мускул показал. В оракле - двойные кавычки.У других баз не знаю :)
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вообще-то, If the SQL mode ANSI_QUOTES is set, double quotes can also be used to quote the identifiers.
 

Absinthe

жожо
флоппик хм, SET sql_mode='ANSI_QUOTES';
Тогда почему бы его всегда и не использовать прямо как указание utf-8 при инициализации?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Мне если честно, backtick в этой роли импонируют больше. Меньше глаза мозолят :)
 

Redjik

Джедай-мастер
Заинтриговали - сейчас посмотрю как в Zend решили это =)
 
Сверху