3

我正在使用使用 sqlserver 作为数据源服务器的 Cakephp 3。我确信我的数据库连接没有问题.. 因为 home.ctp 提示我已连接到我的数据库.. 我也在使用迁移插件来创建我的表.. 似乎没有问题这些工具。但是在我烘烤我的 MVC 之后,我只得到了充满错误的页面..

例如 $bin\cake 烘焙所有测试

我没有发现任何错误,MVC 位于其特定文件夹 testController.php、testTable 等中。

并在浏览器中 localhost:8765\tests

但我得到的只是不同错误的页面..我看到了

Error: SQLSTATE[42000]: [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword 'desc'.

SELECT * FROM (SELECT Tests.id AS [Tests__id], Tests.desc AS [Tests__desc], (ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS [_cake_page_rownum_] FROM tests Tests) _cake_paging_ WHERE _cake_paging_._cake_page_rownum_ <= :c0

左侧还有更多错误。

我认为这是因为控制器有错误的查询或 bake 生成的查询仅适用于 mysql。我只是想知道如何处理这个问题。有没有我忘记做的设置?请指教。我是 Cakephp 新手,英语不是我的母语,如果我不能正确解释我的问题,我很抱歉。提前致谢。

4

3 回答 3

13

正如 Vishal Gajjar 在评论中已经提到的那样,您正在desc为列名使用保留关键字,因此出现错误,这不是错误,而是您的错误。

为了能够使用这些保留字,需要正确引用列名,但是 CakePHP 3 默认不再自动引用,因为这是一项昂贵的操作。

如果您坚持使用保留字,请通过配置quoteIdentifiers中的选项启用标识符引用,或者使用DB 驱动程序的(从 CakePHP 3.4 开始)方法app.php手动启用它。autoQuoting()enableAutoQuoting()

也可以看看

于 2015-01-09T11:46:52.757 回答
2

您可以在有问题的查询之前使用此代码:

$this->Tests->connection()->driver()->autoQuoting(true);

完成后,您可以关闭自动报价:

$this->Tests->connection()->driver()->autoQuoting(false);

所以糟糕的性能只会出现在有问题的查询上。

于 2017-01-27T08:48:23.697 回答
-1

用这个 :

SELECT * FROM (SELECT Tests.id AS [Tests__id], Tests.[desc] AS [Tests__desc], 
(ROW_NUMBER() OVER (ORDER BY (SELECT NULL))) AS [_cake_page_rownum_] FROM tests Tests) _cake_paging_
WHERE _cake_paging_._cake_page_rownum_ <= :c0

如果您确实使用了关键字,请在方括号中使用它[ ]

于 2015-01-09T11:49:14.990 回答