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