我已经安装了最新版本的 CI 2.1.3
现在运行查询后,对于一些非常简单的事情,我的响应时间很慢,例如:
function Bash(){
$sql = “SELECT * FROM Contacts”;
$stmt = sqlsrv_query( $conn, $sql );
if( $stmt === false) {
die( print_r( sqlsrv_errors(), true) );
}
查询远程数据库后。(SQL 服务器 2008)
当我在一个简单的 PHP 脚本中针对同一个远程数据库运行相同的查询时。我立即得到结果。
a) 是否有其他人在使用 codeigniter 中的 sqlsrv 驱动程序时遇到过这个问题?
如果是这样,您是如何解决的?
这是我的连接字符串:
$db['default']['hostname'] = "xxxxx,1433";
$db['default']['username'] = "xx";
$db['default']['password'] = "xxxxxx-xx";
$db['default']['database'] = "xxxxxxxxx";
$db['default']['dbdriver'] = "sqlsrv";
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = TRUE;
$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;
更新:
我通过运行探查器发现了以下内容。
数据库:数据库查询:1(隐藏)0.0659 从联系人中选择 *
加载时间:基类 0.0428 控制器执行时间(欢迎 / AzureBash)58.2173 总执行时间 58.2602
似乎查询在 0.06 秒内执行,但控制器需要一分钟才能加载。
不知道为什么会这样。
解决方案
最新 SQLSRV 驱动程序的活动记录界面有问题。
因此,下载并用这些覆盖现有接口(覆盖 CI 中数据库文件夹中的 sqlsrv 文件夹):
http://www.kaweb.co.uk/blog/mssql-server-2005-and-codeigniter/
注意:这些已经使用 SQL Azure 进行了测试并且可以正常工作。
$query->num_rows(); 不适用于这些驱动程序,因此我建议您改用 count。或者创建自己的包装器。
此外,日期现在是结果集中的日期对象类型。
我希望这有帮助。
解决方案 2
如果由于某种原因您发现了一个使此程序完全无法使用的错误。恢复到最初提供的 sqlsrv 接口。您会发现导致问题的原因是原始接口执行查询的方式,因此,创建了一个数据库帮助器类;使用 $sql = $this->db->last_query(); 获取您将要执行的查询,然后在 database_helper 类中自己执行它:
function MakeDbCall ($sql)
{
$serverName = "xxxxx-xxxx-xxx,1433"; //serverName\instanceName
$connectionInfo = array( "Database"=>"xxx", "UID"=>"xx", "PWD"=>"xxxxx","ConnectionPooling" => "1");
$conn = sqlsrv_connect($serverName,$connectionInfo);
$stmt = sqlsrv_query($conn, $sql);
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
$result_array[] = $row;
}
return $result_array;
}
为 row_array 创建一个。
您应该能够从应用程序的任何位置直接调用此函数。同时利用 active_records 构造查询的方式。
这不是一个理想的解决方案,但在 codeigniter 对他们的 SQLSRV 类进行排序之前,我们无能为力。