Ошибка при использовании Cake PHP SQL Server Driver - PullRequest
1 голос
/ 03 августа 2011

Обновлен (dev) сайт Cake PHP, и ему пришлось сменить драйверы базы данных с ADO на собственный драйвер SQL Server, так как ADO больше не поддерживается в Cake 1.3, 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 )

Каждый из этих параметров является правильным, есть ли определенный способ, которым я должен отформатировать или изменить массив конфигурации базы данных для этого драйвера, или мне чего-то не хватает?

Ответы [ 2 ]

2 голосов
/ 09 августа 2011

Эта ошибка произошла из-за устаревших драйверов SQL Server.Установка последней версии ниже позволяет установить соединение с SQL Server:

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

1 голос
/ 03 августа 2011

Я думаю, что есть какая-то проблема с вашим соединением.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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...