cakephp 2.0.5 Sqlserver需要数据库连接

时间:2012-01-24 09:54:42

标签: sql-server linux cakephp-2.0

我正在尝试使用cakephp 2.0.5在Linux上访问第二个MS SQL数据库。

我在Config / database.php中设置了一个Sqlserver数据源

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。如果我从varius文档中正确理解,

sqlsrv适用于Windows。

如何将它用于linux?

由于

2 个答案:

答案 0 :(得分:1)

我也遇到了这个错误,这很容易让人误解。我最终发现用户[在您的情况下为“用户名”]没有足够的权限来访问数据库[在您的情况下为“DB”]

答案 1 :(得分:0)

有一个“社区技术预览版”for running the Microsoft SQL Server ODBC Driver,但我不认为它提供了您需要的功能。这似乎不与PHP集成,因此不与CakePHP集成。

事实上,我很确定你需要the SQLSRV PHP extension,这只是Windows。您可以在Windows机器上运行MS SQL数据库,并通过与数据库连接的脚本使数据可用,并在同一台机器上托管,返回某种形式的结构化输出(XML,JSON等)。对于更复杂的查询,这种方法可能不会削减它,因此您可能会看到一个简单的REST API实现。

Have a look at this question同样,只有两个答案,但它们包含一些有趣的链接,详细说明了问题。