【问题标题】:CodeIgniter set multiple connections for mssql dbs?CodeIgniter 为 mssql dbs 设置多个连接?
【发布时间】:2011-07-11 08:12:56
【问题描述】:

我已经对 CI 框架感到厌烦了,因为我什至无法为 MSSQL Server 设置多个连接。我找到了一个论坛,其中描述了如何设置多个连接,但它对我来说效果不佳 - mssql_query 语句引发错误,链接标识符不是 MSSQL-Link 资源等。 我做过这样的事情:

1) 设置database.php - 数据库配置文件:

$active_group = 'suburb';
$active_record = FALSE;

$db['suburb']['hostname'] = 'XXXXXXXX';
$db['suburb']['username'] = 'XXXX';
$db['suburb']['password'] = 'XXXXXXX';
$db['suburb']['database'] = 'XXXXXXX';
$db['suburb']['dbdriver'] = 'mssql';
$db['suburb']['dbprefix'] = '';
$db['suburb']['pconnect'] = TRUE;
$db['suburb']['db_debug'] = TRUE;
$db['suburb']['cache_on'] = FALSE;
$db['suburb']['cachedir'] = '';
$db['suburb']['char_set'] = 'utf8';
$db['suburb']['dbcollat'] = 'utf8_general_ci';
$db['suburb']['swap_pre'] = '';
$db['suburb']['autoinit'] = TRUE;
$db['suburb']['stricton'] = FALSE;

$active_group = 'default';
$active_record = FALSE;

$db['default']['hostname'] = 'XXXXXX';
$db['default']['username'] = 'XXXX';
$db['default']['password'] = 'XXXXXXXX';
$db['default']['database'] = 'XXXXXX';
$db['default']['dbdriver'] = 'mssql';
$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;

2) 调用加载dbs函数:

$this->suburbDb = $this->load->database('suburb', true);

3) 创建查询:

$res = mssql_query("
  SELECT TOP 100 ID 
  FROM Table", $this->suburbDb);

【问题讨论】:

  • 观察您的 conig,您有 2 个活动组。这是不可能的,您需要删除第二组 $active_group,$active_record

标签: php sql-server codeigniter


【解决方案1】:

你应该用类似这样的东西初始化两个连接

$this->suburb  = $this->load->database('suburb', TRUE);
$this->default = $this->load->database('default', TRUE); 

$this->db; //<--- houlds the DEFAULT loaded from config file. can only be one

$query = $this->suburb->query('SELECT TOP 100 ID FROM Table');

foreach( $query->result() as $row)
{
....
}

应该是这样的。

附言。查看 codeigniter 指南:CodeIgniter Guide Database Connection

[编辑:没有活动记录]

建立连接后,mssql 应该可以像这样自行执行:

// Send a select query to MSSQL
$query = mssql_query('SELECT TOP 100 ID FROM Table', $this->suburb );

// Check if there were any records
if (!mssql_num_rows($query)) {
    echo 'No records found';
} else {
    while ($row = mssql_fetch_array($query)) {
        echo $row['username'], PHP_EOL;
    }
}

// Free the query result
mssql_free_result($query);

【讨论】:

  • 你的回答很好,但我不想使用活动记录,可能你知道如何使用像 mssql_query($query, $link); 这样的标准语法?
  • 建立连接后试试这个: $version = mssql_query('SELECT @@VERSION'); $row = mssql_fetch_array($version);回声$行[0]; // 清理 mssql_free_result($version);
【解决方案2】:

您正在混合 CI 和 php 本机 mssql 驱动程序。

$this-&gt;suburbDb 是 CI 数据库对象而不是链接标识符:

$this->suburbDb->query('SELECT TOP 100 ID FROM Table');

http://codeigniter.com/user_guide/database/queries.html

或者如果你真的需要那么

mssql_query($query, $this->suburbDb->conn_id)

【讨论】:

  • 有趣的点 $this->suburbDb 是 CI 数据库对象而不是链接标识符,但我可以在 php 中使用标准 sql 查询函数,例如 mssql_query($query, $link);?
  • 当然,你可以使用mssql_query($query, $this-&gt;suburbDb-&gt;conn_id)
  • 你已经从我这里得到了一切 - 我是关于积分,接受答案并发表评论,谢谢。
猜你喜欢
  • 2012-01-29
  • 1970-01-01
  • 2020-10-08
  • 2014-06-20
  • 2020-10-04
  • 1970-01-01
  • 2019-08-27
  • 1970-01-01
  • 2020-03-07
相关资源
最近更新 更多