2012-03-08 4 views
0

Я не понимаю, почему CodeIgniter обертывает мое имя таблицы в скобках. Когда я использую драйвер ODBC CodeIgniter для MS SQL, он показывает ошибки ниже, однако он отлично работает с использованием драйвера 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

благодаря это работает отлично, и здесь я должен добавить полное имя таблицы любит базы данных. имя_схемы.table_name ... Еще раз спасибо –

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