2012-03-08 189 views
0

我不明白爲什麼CodeIgniter將我的表名稱包裝在括號中。當我爲MS SQL使用CodeIgniter的ODBC驅動程序時,它會顯示下面的錯誤,但它使用MySql驅動程序可以很好地工作。我怎樣才能阻止這種錯誤發生?codeigniter和odbc連接

A Database Error Occurred 

Error Number: 37000 

[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ')'. 

SELECT * FROM (ci_sessions) WHERE session_id = '3ad914bb5f5728e8ac69ad1db8fc9841' AND user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2' 

Filename: D:\wamp\www\IVR_Panel\system\database\DB_driver.php 

Line Number: 330 

我也試過在SQL Server 2005中執行同樣的查詢,它沒有括號,但仍然與他們的錯誤。我使用活動記錄,因此可以輕鬆地在ODBC和MySQL驅動程序之間切換。我在哪裏可以修改CodeIgniter以刪除括號?

回答

4

這實際上是CodeIgniter中的一個錯誤。在ODBC驅動程序(/system/database/drivers/odbc/odbc_driver.php)當您選擇一個表,它使用下面的方法:

function _from_tables($tables) 
{ 
    if (! is_array($tables)) 
    { 
     $tables = array($tables); 
    } 

    return '('.implode(', ', $tables).')'; 
} 

它試圖將多個表中選擇一起執行運算符優先級,這應該工作得很好,如果你使用多個表,但是有一個表仍然會嘗試對它進行分組,導致你得到的錯誤。

不幸的是,我不認爲有可能擴展這些驅動程序文件,因此您可能必須編輯核心文件本身。注意到這一點,你需要在未來更新CodeIgniter的情況下,你必須將方法更改爲類似如下:

function _from_tables($tables) 
{ 
    if (! is_array($tables)) 
    { 
     return strstr($tables, ',') ? '('.$tables.')' : $tables; 
    } 
    else 
    { 
     return count($tables) > 1 ? '('.implode(', ', $tables).')' : end($tables); 
    } 
} 
+0

得益於它完美的作品,在這裏我要補充完整的表名喜歡數據庫。 schema_name.table_name ...再次感謝 – 2012-03-09 07:08:22