2013-11-24 5 views
4

Я пытаюсь настроить Dev среду Windows: Windows 8.1 with IIS 8.5 running SQL Server 2008RC2 and PHP 5.3.24Подключение к SQL Server с помощью CodeIgniter

CodeIgniter 2.1.4

Я могу подключиться к базе данных просто отлично с помощью PDO в обычном PHP скрипт. Но когда я пытаюсь подключиться с помощью CodeIgniter я получаю эту ошибку:

"Unable to connect to your database server using the provided settings. 
Filename: C\inetpub\wwwroot\ci\system\database\DB_Driver.php 
Line number 124" 

Если открыть PHP менеджер в интерфейсе IIS я могу увидеть, что оба необходимые драйверы включены:

php_sqlsrv_53_ts.dll 
php_pdo_sqlsrv_53_ts.dll 

Оба эти отображается в моем ini-файле.

В моем конфигурационном файле базы данных CodeIgniter у меня установлен драйвер: sqlsrv (если я использую mssql, я получаю пустой экран).

У меня есть драйверы /system/database/drivers/sqlsrv в моей установке CI.

Единственная вещь, которая нечетна, находится в phpinfo() в разделе Configure Command, она показывает --without-mssql и --without-pdo-mssql, но я знаю, что она работает вне CI.

phpinfo() также показывает INI путь к файлу на C:\WINDOWS, но он также показывает, загруженную INI путь как C:\Program Files (x86)\PHP\v5.3\php.ini

Я пытался сдвинув его, но не повезло.

My/приложение/Config/базы данных конфигурационный файл:

$db['default']['hostname'] = 'localhost'; 
$db['default']['username'] = 'localsql'; 
$db['default']['password'] = 'password'; 
$db['default']['database'] = 'elements'; 
$db['default']['dbdriver'] = 'sqlsrv'; 
$db['default']['dbprefix'] = ''; 
$db['default']['pconnect'] = TRUE; 
$db['default']['db_debug'] = TRUE; 
$db['default']['cache_on'] = FALSE; 
$db['default']['cachedir'] = ''; 
$db['default']['char_set'] = 'utf8'; 
$db['default']['dbcollat'] = 'utf8_general_ci'; 
$db['default']['swap_pre'] = ''; 
$db['default']['autoinit'] = TRUE; 
$db['default']['stricton'] = FALSE; 

Я пропускаю что-либо конкретное?

+0

Какова ваша конфигурация подключения db в приложении \ config \ config.php – Patato

+0

просто установите драйвер в PDO в application/config/database.php – ahmad

+0

Patato Я добавил свой конфиг в свой оригинальный пост, это не позволило мне форматировать это в комментарии. –

ответ

1

Вы должны иметь следующее в конфигурации базы данных

$db['default']['driver']='sqlsrv'; //your mistake 
$db['default']['database']='your_database'; // your mistake 
$db['default']['pconnect']=false; 
4

Во-первых, изменить

$db['default']['database'] = ‘elements; 
$db['default']['dbdriver'] = ‘sq’lsrv; 

в

$db['default']['database'] = 'elements'; 
$db['default']['dbdriver'] = 'sqlsrv'; 

в файле конфигурации.

Во-вторых, драйвер sqlsrv неисправен.Открыть /system/database/drivers/sqlsrv/sqlsrv_driver.php

Чтобы pconnect в конфигурации, изменение линии 89 от

$this->db_connect(TRUE); 

в

return $this->db_connect(TRUE); 

Если вы хотите, чтобы правильно использовать affected_rows, а затем изменить линии 274 от

return @sqlrv_rows_affected($this->conn_id); 

к

return @sqlsrv_num_rows($this->result_id); 

Я видел несколько предложений о том, как исправить affected_rows размещены в другом месте, но изменения _execute не использовать Scrollable сломается сохраненные сессии, если вы также используете SQLSRV для проверки сеанса.

2

В случае, если это помогает, вот 3 разных способа подключения к SQL Server с использованием CodeIgnitor 2 (я использую версию 2.2.1), которые работают для меня с использованием Windows 8.1, SQL Server 2012 и PHP 5.3 под управлением IIS:

В моем случае у меня есть именованный экземпляр SQL Server с именем «MSSQLSERVER2012». Если вы не используете именованный экземпляр, вы можете изменить (local) \ MSSQLSERVER2012 на (локальный) во всех трех примерах ниже.

Способ № 1: SQLSRV: Используйте эти параметры в database.php:

$db['local_windows_sqlsrv']['username'] = 'username'; 
$db['local_windows_sqlsrv']['password'] = 'SQL_PASSWORD_HERE'; 
$db['local_windows_sqlsrv']['database'] = 'my_db_name'; 
$db['local_windows_sqlsrv']['hostname'] = '(local)\MSSQLSERVER2012'; 
$db['local_windows_sqlsrv']['dbdriver'] = 'sqlsrv'; 
$db['local_windows_sqlsrv']['dbprefix'] = ''; 
$db['local_windows_sqlsrv']['pconnect'] = FALSE; 
$db['local_windows_sqlsrv']['db_debug'] = TRUE; 
$db['local_windows_sqlsrv']['cache_on'] = FALSE; 
$db['local_windows_sqlsrv']['cachedir'] = ''; 
$db['local_windows_sqlsrv']['char_set'] = 'utf8'; 
$db['local_windows_sqlsrv']['dbcollat'] = 'utf8_general_ci'; 
$db['local_windows_sqlsrv']['swap_pre'] = ''; 
$db['local_windows_sqlsrv']['autoinit'] = TRUE; 
$db['local_windows_sqlsrv']['stricton'] = FALSE; 

Способ № 2: с ODBC SQL Server: сначала внести изменения показано здесь: https://stackoverflow.com/a/9617808/908677

Затем используйте эти настройки в database.php:

$db['local_windows_odbc']['database'] = 'my_db_name'; 
$db['local_windows_odbc']['hostname'] = 'Driver={SQL Server};Server=(local)\MSSQLSERVER2012;Database=' . $db['local_windows_odbc']['database']; 
$db['local_windows_odbc']['username'] = 'username'; 
$db['local_windows_odbc']['password'] = 'SQL_PASSWORD_HERE'; 
$db['local_windows_odbc']['dbdriver'] = 'odbc'; 
$db['local_windows_odbc']['dbprefix'] = ''; 
$db['local_windows_odbc']['pconnect'] = FALSE; 
$db['local_windows_odbc']['db_debug'] = TRUE; 
$db['local_windows_odbc']['cache_on'] = FALSE; 
$db['local_windows_odbc']['cachedir'] = ''; 
$db['local_windows_odbc']['char_set'] = 'utf8'; 
$db['local_windows_odbc']['dbcollat'] = 'utf8_general_ci'; 
$db['local_windows_odbc']['swap_pre'] = ''; 
$db['local_windows_odbc']['autoinit'] = TRUE; 
$db['local_windows_odbc']['stricton'] = FALSE; 

Метод №3: PDO с SQL Server.

ОБНОВЛЕНИЕ: этот метод действительно работает для установления соединения и вставки строк, но для того, чтобы получить запрос на работу, вам необходимо обновить до CodeIgnitor 3.0, поскольку он добавляет истинную поддержку SQL Server в PDO.

Сначала сделайте следующие изменения в __construct() в системе/базы данных/драйверов/PDO/pdo_driver.php

Replace:

empty($this->database) OR $this->hostname .= ';dbname='.$this->database; 

С:

if (strpos($this->hostname, 'sqlsrv') === FALSE) 
{ 
    empty($this->database) OR $this->hostname .= ';dbname='.$this->database; 
} 

Тогда используйте эти настройки в database.php:

// PDO with SQL Server 
// IMPORTANT NOTE: requires mod to __construct() in pdo_driver.php to prevent appending ';dbname='.$this->database to hostname 
$db['local_windows_pdo']['username'] = 'username'; 
$db['local_windows_pdo']['password'] = 'SQL_PASSWORD_HERE'; 
$db['local_windows_pdo']['database'] = 'my_db_name'; 
$db['local_windows_pdo']['hostname'] = 'sqlsrv:server=(local)\MSSQLSERVER2012;Database=' . $db['local_windows_pdo']['database']; 
$db['local_windows_pdo']['dbdriver'] = 'pdo'; 
$db['local_windows_pdo']['dbprefix'] = ''; 
$db['local_windows_pdo']['pconnect'] = FALSE; 
$db['local_windows_pdo']['db_debug'] = TRUE; 
$db['local_windows_pdo']['cache_on'] = FALSE; 
$db['local_windows_pdo']['cachedir'] = ''; 
$db['local_windows_pdo']['char_set'] = 'utf8'; 
$db['local_windows_pdo']['dbcollat'] = 'utf8_general_ci'; 
$db['local_windows_pdo']['swap_pre'] = ''; 
$db['local_windows_pdo']['autoinit'] = TRUE; 
$db['local_windows_pdo']['stricton'] = FALSE; 
Смежные вопросы