2012-06-26 1 views
0

Я создаю новую CMS с функцией установки.Как лучше всего изменить sql-запросы с префиксом таблицы

Я разрешаю именам таблиц с префиксом пользовательской строки.

Каков рекомендуемый метод модификации sql с именами префиксных таблиц?

Должен ли я добавить DB_PREFIX в каждый запрос или каким-либо образом это можно сделать потом в моем классе базы данных путем модификации sql?

Благодаря

ответ

1

Вы можете добавить префикс для каждого запроса, да.

Вы также можете разобрать каждый запрос с помощью функции str_replace, как это:

str_replace('mytable', 'prefix_mytable', $Query); 

Я пойду за вариант номер 1, меньше нагрузки.

СОВЕТ: Если вы создаете новую CMS, укажите класс DB и автоматически добавьте префикс.

+0

То есть отличная идея, но имена таблиц могут быть Unkown. Я предполагаю, что я мог бы: 1. получить список таблиц из базы данных 2. удалить префикс из имен 3. хранить имена таблиц без префикса в $ из массива 4. хранить имена таблиц с префикс в $ массиве 5. сделайте замену str с помощью массивов from и to на sql Это лучший способ, как вы думаете? –

+0

Да, вы знаете имя таблицы. Когда вы запускаете запрос, скажем, SELECT * FROM supertable, вы знаете, что имя таблицы является supertable. Поэтому вам просто нужно сделать SELECT * FROM .str_replace ('supertable', 'prefix_supertable', $ Table). ' WHERE 1' –

+0

Это в основном то же, что и DB_PREFIX. table_name хотя ... Я пробовал то, что написал выше, но он ломается, когда в именах столбцов используются те же строки, которые используются в именах таблиц. –

2

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

Вместо того чтобы писать стандартный SQL-запрос, обнимайте имена таблиц, например. фигурные скобки, как:

//SQL query in your code 
$query=prefixQuery("SELECT name FROM {customers} WHERE id=$id"); 

и определить простую функцию, которая заменит левую клавишу {с префиксом, и удалить правый}:

define(DB_PREFIX,'myprefix_'); 

function prefixQuery($query) 
{ 
    return str_replace('}','',str_replace('{',DB_PREFIX,$query)); 
} 

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

  • Нет связанных вопросов^_^