【问题标题】:Codeigniter MSSQL/SQLSRV ConnectionCodeigniter MSSQL/SQLSRV 连接
【发布时间】: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 外部建立了连接。连接成功且没有错误。

为什么会出现这个错误?

【问题讨论】:

    标签: php sql-server codeigniter sqlsrv


    【解决方案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);
        }
        

        我能够连接到数据库并创建数据库应用程序。

        希望它能帮助有需要的人:)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-01-29
          • 1970-01-01
          • 2012-06-09
          • 1970-01-01
          • 1970-01-01
          • 2013-03-17
          • 1970-01-01
          • 2020-10-04
          相关资源
          最近更新 更多