2014-01-12 4 views
1

Я полагался на Pdo Api, когда я построил свое веб-приложение, которое оказалось довольно большим, теперь мне нужно уметь префикс таблиц, таких как prefix_tablename ... Как мне подойти к этому?Префикс таблицы Pdo

  • Изготовление обертки (требуется много времени, трудно выполнять и т. Д.).
  • Добавить str_replace после каждого запроса, да, это звучит глупо ...

    $ STMT = $ db-> подготовить ("запрос FROM: приставкой: таблицы") ...

и т. Д.

Расширить класс PDO и взломать его там?

Есть ли какая-нибудь магическая особенность, которую я, возможно, пропустил, что может помочь мне достичь этого ...?

+4

Вариант 3: переосмыслите свой дизайн базы данных (т. Е. Вам действительно нужно префикс ваших таблиц?) – PeeHaa

+0

Зачем вам приписывать свои таблицы? –

ответ

1

Это не ответ, который вы хотите на всех, но я бы рекомендовал вам использовать DBAL (Data Base Abstraction Layer). В этом случае я бы порекомендовал Doctrine. Если вы его использовали, все, что вам нужно будет изменить, - это имена таблиц INSIDE entities. Ваш код будет точно таким же.

В любом случае, удачи. Там нет простого ответа, кроме не изменения базы данных

0

Вы можете расширить класс PDO и использовать метод Magica __call() проверить prepare() вызываемый метод и заменить :: префикс :: в тексте запроса. Должно быть что-л так:

class PrefixedPDO extends PDO { 

    /** 
    * @link http://www.php.net/manual/en/language.oop5.overloading.php#object.call 
    */ 
    public function __call($name, $arguments) 
    { 
     // according to [this](http://php.net/manual/ru/pdo.prepare.php) - query should be in the args 
     if ($name === 'prepare') { 
      // check for the ::prefix:: in the query text (use params for that) 
     } 
    } 

} 

Вам также необходимо изменить PDO инициализации к новому классу - PrefixedPDO();

Надеюсь, это поможет.

Смежные вопросы