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概览

Codeigniter- Ajax Codeigniter Ajax - 通过ajax返回不止一行

如何在codeigniter中集成swfupload