Codeigniter - 连接 MySQL 和 SQL 服务器的致命错误

Codeigniter - Fatal error to connect MySQL and SQL Server

我需要在同一应用程序中连接到 MySQL 和 SQL 服务器。我的 php 版本 5.6.11 和 codeigniter 3.0.1。我按照以下步骤建立连接:

  1. 我下载这个文件并粘贴到xampp\php\ext

    php_sqlsrv_56_ts
    php_pdo_sqlsrv_56_ts

  2. 像这样编辑 php.ini 文件:

    分机=php_sqlsrv_56_ts.dll
    分机=php_pdo_sqlsrv_56_ts.dll

database.php

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',
    'username' => 'root',
    'password' => '',
    'database' => 'vtp',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

$db['biodb'] = array(
    'hostname' => '192.168.20.231',
    'username' => 'abzalali',
    'password' => '',
    'database' => 'pdata',
    'dbdriver' => 'sqlsrv',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'autoinit' => TRUE,
    'stricton' => FALSE,
);

控制器:

<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class biodb extends CI_Controller {

    public function __construct() {

        parent::__construct();
        $this->sqlsrvr = $this->load->database('biodb', true);
    }

    public function index() {
        $query = $biodb->get('arb_protest_pp');
        foreach ($query->result() as $row)
            echo $row->id;
    }

}

然后我在 url 中调用控制器 'biodb',并得到错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65488 bytes) in C:\xampp\htdocs\vtp\system\database\DB_driver.php on line 771

之后: 我在这个函数

中的 "DB_Driver.php" 中添加了一个新行“$this->db_select();
public function simple_query($sql)
{
    if ( ! $this->conn_id)
    {
        $this->initialize();
    }
    $this->db_select();
    return $this->_execute($sql);
}

然后我又收到另一个错误:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65488 bytes) in C:\xampp\htdocs\vtp\system\database\DB_driver.php on line 642

我真的没有发现我到底错过了什么。我需要使用 codeigniter active record 这个 sqlserver 数据库。

我在过去使用带 CodeIgniter 的直接 sqlsrv 驱动程序 运行 遇到过很多问题。

我会通过在您的 databbase.php 配置文件中执行以下操作将您的 sqlsrv 转换为 pdo_sql_srv:

$db['biodb'] = array(
    'hostname' => '192.168.20.231',
    'username' => 'abzalali',
    'password' => '',
    'database' => 'pdata',
    'dbdriver' => 'pdo',
    'subdriver' => 'sqlsrv',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => TRUE,
    'cache_on' => FALSE,
    'autoinit' => TRUE,
    'stricton' => FALSE,
);

我也很惊讶您在控制器中的 index 方法上没有收到未定义的 var 错误。尝试将其更改为:

public function index() {
    //you need to call the database property you 
    //created in your construct which appears to be sqlsrvr
    $query = $this->sqlsrvr->get('arb_protest_pp');
    foreach ($query->result() as $row) {
        echo $row->id;
    }
}