Codeigniter MSSQL/SQLSRV 连接
Posted
技术标签:
【中文标题】Codeigniter MSSQL/SQLSRV 连接【英文标题】:Codeigniter MSSQL/SQLSRV Connection 【发布时间】:2013-12-05 10:52:50 【问题描述】:我正在开发一个连接到 MSSQL 数据库的网络应用程序。我之前成功地连接到数据库没有任何问题,但是我对 sqlsrv_driver 文件进行了微小的更改。我遇到了以下错误,将更改回滚到原始文件,但仍然存在问题。
我已确保我安装了相关的 MS 驱动程序,使用了正确的端口号等,但是它返回此错误:
Unable to connect to your database server using the provided settings.
Filename: D:...\system\database\DB_driver.php
Line Number: 124
除此之外,我还通过 sqlsrv_connect 函数在 codeigniter 外部建立了连接。连接成功且没有错误。
为什么会出现这个错误?
【问题讨论】:
【参考方案1】:对于从 PHP->SQLSrv 的连接,您需要安装这些驱动程序:
一个。 Microsoft Drivers 3.0 for PHP for SQL Server (SQLSRV30.EXE)
b. Microsoft Visual C++ 2010 Redistributable Package (32bits/64bits)
c。 Microsoft® SQL Server® 2012 Native Client (sqlncli.msi)
并在 php.ini 文件中添加这一行:
extension=php_sqlsrv_54_ts.dll
【讨论】:
【参考方案2】:驱动程序 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
的建议,但是如果您还使用 sqlsrv 进行会话验证,将 _execute
更改为不使用 Scrollable
会破坏存储的会话。
【讨论】:
【参考方案3】:我刚刚解决了这个问题。我正在连接到由微软 Azure 托管的 MSSQL
在互联网上进行了几次研究后,我遵循的步骤如下:
数据库.cfg:
$db['default']['hostname'] = 'XXXXXXX.database.windows.net';
$db['default']['username'] = 'username';
$db['default']['password'] = 'password';
$db['default']['database'] = 'databasename';
$db['default']['dbdriver'] = 'sqlsrv';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = FALSE;
$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;
主要是 dbdriver、pcconnect 和您应该正确配置的主机名。休息很常见。从您的 azure 数据库详细信息中获取主机名。
我还修改了几个系统文件,因为我听说 DB 驱动程序存在问题。
系统/数据库/驱动程序/sqlsrv/sqlsrv_driver.php
function db_pconnect()
//$this->db_connect(TRUE);
return $this->db_connect(TRUE);
和
function affected_rows()
//return @sqlrv_rows_affected($this->conn_id);
return @sqlsrv_num_rows($this->result_id);
我能够连接到数据库并创建数据库应用程序。
希望它能帮助有需要的人:)
【讨论】:
以上是关于Codeigniter MSSQL/SQLSRV 连接的主要内容,如果未能解决你的问题,请参考以下文章
Codeigniter 3 - 从外部 Codeigniter 安装访问会话
调用未定义函数 codeigniter\locale_set_default() 时出现 codeigniter 错误
codeigniter 中是不是有子查询库?或者我如何在codeigniter 3中进行子查询?
php优秀框架codeigniter学习系列——CodeIgniter.php概览