cakephp 2.0.5 Sqlserver требует подключения к базе данных - PullRequest
0 голосов
/ 24 января 2012

Я пытаюсь получить доступ ко второй базе данных MS SQL с помощью cakephp 2.0.5 в Linux.

Я установил источник данных Sqlserver в Config / database.php

public $msdb = array(

'datasource' => 'Database/Sqlserver',

'persistent' => false,

'host' => 'xxx.xxx.xxx.xxx',

'port' => '1433',

'login' => 'username',

'password' => 'password',

'database' => 'DB',

'prefix' => '',

);

Однако я получаю эту ошибку:

Отсутствует соединение с базой данных

Ошибка: Sqlserver требует подключения к базе данных

Ошибка: подтвердите, что вы создали файл: app / Config / database.php.

Примечание. Если вы хотите настроить это сообщение об ошибке, создайте app / View / Errors / missing_connection.ctp.

Трассировка стека

#0 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Model/ConnectionManager.php(101): DboSource->__construct(Array)

#1 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Model/Model.php(3234): ConnectionManager::getDataSource('msdb')

#2 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Model/Model.php(1030): Model->setDataSource('msdb')

#3 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Model/Model.php(3258): Model->setSource('PERSON')

#4 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Model/Model.php(2483): Model->getDataSource()

#5 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Controller/Component/PaginatorComponent.php(172): Model->find('all', Array)

#6 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Controller/Controller.php(1025): PaginatorComponent->paginate(NULL, Array, Array)

#7 /var/www/html/modip/app/Controller/PersonsController.php(7): Controller->paginate()

#8 [internal function]: PersonsController->index()

#9 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Controller/Controller.php(473): ReflectionMethod->invokeArgs(Object(PersonsController), Array)

#10 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Routing/Dispatcher.php(104): Controller->invokeAction(Object(CakeRequest))

#11 /var/www/html/modip/cakephp-cakephp-6864406/lib/Cake/Routing/Dispatcher.php(86): Dispatcher->_invoke(Object(PersonsController), Object(CakeRequest), Object(CakeResponse))

#12 /var/www/html/modip/app/webroot/index.php(96): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))

#13 {main}

За пределами CakePHP я могу без проблем получить к нему доступ, используя

.

mssql_connect ("ip_addr: 1433", $ user, $ pass);

Есть ли что-то еще, что я должен сделать?

Я отладил его немного больше и вижу, что он не работает в

lib / Cake / Model / Datasource / Database / Sqlserver.php в

public function enabled() {

return in_array('sqlsrv', PDO::getAvailableDrivers());

}

В драйверах PDO нет sqlsrv. Если я правильно понимаю из различных документов,

sqlsrv для Windows.

Как я могу использовать его для Linux?

Спасибо

Ответы [ 2 ]

1 голос
/ 03 марта 2012

Я тоже получал эту ошибку, она довольно обманчива.В конце концов я обнаружил, что у пользователя ["username" в вашем случае] не было достаточных прав для доступа к базе данных ["DB" в вашем случае]

0 голосов
/ 25 января 2012

Существует «Предварительный просмотр технологии сообщества» для запуска драйвера ODBC для Microsoft SQL Server , но я не думаю, что он обеспечивает необходимую вам функциональность. Это не похоже на интеграцию с PHP и, следовательно, не с CakePHP.

На самом деле, я почти уверен, что вам нужно расширение PHP SQLSRV , которое предназначено только для Windows. Вы можете запустить базу данных MS SQL на компьютере с Windows и сделать данные доступными через сценарий, взаимодействующий с базой данных и размещенный на той же машине, возвращая некоторую форму структурированного вывода (XML, JSON и т. Д.). Для более сложных запросов этот подход, вероятно, не подойдет, так что вы, вероятно, посмотрите на простую реализацию REST API.

Посмотрите также на этот вопрос , есть только два ответа, но они содержат некоторые интересные ссылки, подробно описывающие проблему.

...