【问题标题】:Error using Cake PHP SQL Server Driver使用 Cake PHP SQL Server 驱动程序时出错
【发布时间】:2011-10-19 03:46:29
【问题描述】:

升级了一个(开发)Cake PHP 站点,并且不得不将数据库驱动程序从 ADO 更改为 SQL Server 自己的驱动程序,因为 Cake 1.3 不再支持 ADO,I .新的 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(),它显然是一个错误的布尔值(我试图回显该变量,但它什么也不显示)。

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

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

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

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

这些参数中的每一个都是正确的,我是否应该以特定的方式格式化或更改此驱动程序的数据库配置数组,或者我缺少什么?

【问题讨论】:

    标签: php sql-server database cakephp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      我认为您的连接存在问题。 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
          );
      

      我觉得连接应该是这样的

      这是我使用的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);
      

      【讨论】:

      • 这正是它正在做的事情,我没有配置端口信息,但它使用的是正确的默认端口。您的最后一段代码几乎与 sqlsrv.php 驱动程序文件中的内容完全相同。
      • 您是否尝试过从简单的 php 连接 sql 服务器,我的意思是没有框架?
      猜你喜欢
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-29
      • 2012-07-21
      • 2018-07-22
      • 2020-07-13
      相关资源
      最近更新 更多