Codeigniter 2.0.3 с активной записью SQL Server

#sql-server #codeigniter

#sql-сервер #codeigniter — инициализатор кода

Вопрос:

Я работаю над обновлением приложения Codeigniter, которое у меня запущено с версии 1.7.2 до версии 2.0.3, но я не могу подключиться к SQL Server. Обе версии работают на одном сервере под управлением php 5.2.10 и подключаются к одному и тому же SQL-серверу.

Это ошибка из CI 2.0.3

 Unable to connect to your database server using the provided settings.
Filename: core/Loader.php
Line Number: 260
 

Это строка подключения, которую я использую, которая, конечно, работает на 1.7.2

 $db['reports']['hostname'] = "mysqlserver";
$db['reports']['username'] = "sqluser";
$db['reports']['password'] = "sqlpass";
$db['reports']['database'] = "SQLReportDB";
$db['reports']['dbdriver'] = "mssql";
$db['reports']['dbprefix'] = "";
$db['reports']['pconnect'] = TRUE;
$db['reports']['db_debug'] = TRUE;
$db['reports']['cache_on'] = FALSE;
$db['reports']['cachedir'] = "";
$db['reports']['port']     = 972;
 

В контроллере я вызываю соединение с этим

 $report_db = $this->load->database('reports', TRUE);
 

Ниже приведена функция в файле загрузчика, в которой она сообщает о сбое.
Строка 260 — это return DB($params, $active_record);

 /**
 * Database Loader
 *
 * @param   string  the DB credentials
 * @param   bool    whether to return the DB object
 * @param   bool    whether to enable active record (this allows us to override the config setting)
 * @return  object
 */
public function database($params = '', $return = FALSE, $active_record = NULL)
{
    // Grab the super object
    $CI =amp; get_instance();

    // Do we even need to load the database class?
    if (class_exists('CI_DB') AND $return == FALSE AND $active_record == NULL AND isset($CI->db) AND is_object($CI->db))
    {
        return FALSE;
    }

    require_once(BASEPATH.'database/DB.php');

    if ($return === TRUE)
    {
        return DB($params, $active_record);
    }

    // Initialize the db variable.  Needed to prevent
    // reference errors with some configurations
    $CI->db = '';

    // Load the DB class
    $CI->db =amp; DB($params, $active_record);
}
 

Комментарии:

1. Звучит как фактическая ошибка подключения. Дважды проверьте учетные данные? Что-нибудь в журналах sql Server?

2. попробуйте установить $db[‘reports’][‘pconnect’] = FALSE;

3. Попытался установить $db[‘reports’][‘pconnect’] = FALSE. Никаких изменений.

4. Я, очевидно, изменил свою информацию о подключении выше на общие настройки, но с 1.7.2 на 2.0.3 я копирую и вставляю настройки подключения к базе данных. Никаких шансов на опечатку 🙂 Те же серверы, поэтому нет никаких проблем с брандмауэром или сетью.

5. Похоже, что 2.0.3 больше не использует параметр порта $db [‘reports’] [‘port’] = 972; Я удалил эту строку и изменил подключение к серверу, чтобы включить порт $db [‘reports’] [‘hostname’] = «mysqlserver.example.com: 972»;

Ответ №1:

Вот некоторые настройки, которые я использую при подключении к SQL-серверу, которого вы не указали. Может потребоваться в связи с обновлением…

 $db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
 

Комментарии:

1. Я заметил эти несколько дополнительных настроек и добавил их, но без изменений.

Ответ №2:

$db[‘reports’][‘port’] больше не действителен

Порт необходимо добавить в конец сервера

$db[‘отчеты’][‘имя хоста’] = «mysqlserver:972»;