使用Cake PHP SQL Server驱动程序时出错

时间:2011-08-03 14:05:37

标签: php sql-server database cakephp

升级了一个(dev)Cake PHP站点并且不得不将数据库驱动程序从ADO更改为SQL Server自己的驱动程序,因为Cake 1.3,I中不再支持ADO。新的SQL Server驱动程序安装在PHP中,在PHPinfo()中显示并且应该可以工作,但是当我尝试使用数据库加载页面时,我收到此错误:

Warning (2): sqlsrv_query() expects parameter 1 to be resource, boolean given 
[APP\plugins\datasources\models\datasources\dbo\dbo_sqlsrv.php, line 184]
Warning (512): SQL Error: An invalid parameter was passed to sqlsrv_query.
 [CORE\cake\libs\model\datasources\dbo_source.php, line 684]
Query: SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 

似乎正在发生的事情是我的连接未在dbo_sqlsrv.php驱动程序中建立;一个“$this->connection”变量应该是连接资源,然后传递给sqlsrv_query(),它显然是一个错误的bool(我试图回显变量并且它什么也没显示)。

这是连接应该设置的地方:

sqlsrv_connect($this->config['host'] . $port, $params)

打印传入的变量给我这个:

SRV, 1433 Array ( [Database] => DB [CharacterSet] => char 
[MultipleActiveResultSets] => [UID] => sa [PWD] => password )

这些参数中的每一个都是正确的,是否有一种特定的方式我应该为这个驱动程序格式化或更改我的数据库配置数组,还是我缺少一些东西?

2 个答案:

答案 0 :(得分:2)

此错误是由于过时的SQL Server驱动程序造成的。从下面安装最新版本允许SQL Server连接:

http://www.microsoft.com/download/en/details.aspx?id=20098

答案 1 :(得分:1)

我认为您的连接存在一些问题。 PHP无法与sql Server建立连接。

var $default = array(
        'driver' => 'sqlsrv',
        'persistent' => false,
        'host' => 'Myhome-PC\SQLEXPRESS', // or ip-address(192.168.1.13)
        'login' => 'username',
        'password' => 'password',
        'database' => 'db',
        'prefix' => 'tbl',
        'port' => NULL,
        'returnDatesAsStrings' => True
    );

我认为Connection应该是这个

以下是我使用的sqlsrv_dbo

你的$param应该是这样的

$connectionInfo = array("UID" => $config['login'], 
                        "PWD" => $config['password'], 
                        "Database" => $config['database'],   
                        'MultipleActiveResultSets' => 1,
                        'ConnectionPooling' => 0
);
if(isset($config['ReturnDatesAsStrings'])){
         $connectionInfo['ReturnDatesAsStrings'] = $config['ReturnDatesAsStrings'];
}
$this->connection = sqlsrv_connect($config['host'] . $port, $connectionInfo);