соединения codeigniter и odbc - PullRequest
0 голосов
/ 08 марта 2012

Я не понимаю, почему 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 для удаления скобок?

1 Ответ

4 голосов
/ 08 марта 2012

На самом деле это ошибка в 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...