在 SQL Server 本机客户端 10.0 中执行查询时出错


Error executing Queries in SQL Server Native Client 10.0

我最近又开始使用php(上一次是7年前),一些恶魔建议我使用codeigniter Framework。

我尝试使用 ODBC 驱动程序连接到 MSSQL 2008 R2 中的数据库服务器,使用 x64 IIS 上的 x64 php 版本。这是原因之一,因为我没有使用微软提供的 php 本机驱动程序,另一个是因为生产环境将在 CentOS 中,顺便说一句,使用该驱动程序没有任何意义......

切中要害:尝试使用活动记录/odbc配置连接到数据库会给我这个错误

A Database Error Occurred
--------------------------
Error Number: 01000
[Microsoft][SQL Server Native Client 10.0][SQL Server]Executing SQL directly; no cursor.
SELECT * FROM (WebUsers)
Filename: C:'projects'php'test'system'database'DB_driver.php
Line Number: 330

而且我只执行一个简单的查询来检索表。

$query = $this->db->get('WebUsers');
return $query->result_array();

这些是我的连接设置:

$db['default']['hostname'] = 'Driver={SQL Server Native Client 10.0};Server=localhost;Database=XXXXXXXXX;';
$db['default']['username'] = 'WWWWWW';
$db['default']['password'] = 'YYYYYY';
$db['default']['database'] = 'XXXXXXXXX';
$db['default']['dbdriver'] = 'odbc';
$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;
不知道

如何解决它

我认为这是 CI 中的一个旧错误。您必须修改/system/database/drivers/odbc/odbc_driver.php 中的函数 _form_tables()

function _from_tables($tables)
{
    if ( ! is_array($tables))
    {
        return strstr($tables, ',') ? '('.$tables.')' : $tables;
    }
    else
    {
        return count($tables) > 1 ? '('.implode(', ', $tables).')' : end($tables);
    }
}

希望这会起作用。

$this->db->query($sql);     

代替上述查询,请使用以下方法在代码点火器中执行过程

 $this->db->simple_query($sql);