2012-06-26 63 views
0

我正在創建一個具有安裝程序功能的新CMS。如何最好地修改帶有表前綴的sql查詢

我允許表名以前綴自定義字符串。

什麼是推薦的方法,用前綴的表名來模擬sql?

我是否必須將DB_PREFIX添加到每個查詢中,或者是否有任何方法可以在我的數據庫類中通過modyfing sql來完成?

謝謝

回答

1

您可以爲每個查詢添加一個前綴,是的。

您也可以解析與功能str_replace函數這樣每次查詢:

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

我會去選擇1號,負荷少。

建議:如果您創建新的CMS,請提供一個數據庫類並自動添加前綴。

+0

那是一個偉大的想法,但該表的名稱可能是未知的。 我想我可以:1. 從數據庫中獲取表的列表 2.從名字從數組中刪除前綴 3.存儲表名,而無需前綴在$ 4.存儲表名與$ to數組中的前綴 5.使用sql和sql的數組做一個str替換這是您認爲的最佳方式嗎? –

+0

是的,你知道表名。當你運行查詢時,讓我們說SELECT * FROM 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)); 
}