我使用Cakephp 3使用sqlserver作为数据源服务器。我确信我的数据库连接没有问题..因为home.ctp提示我已连接到我的数据库..而且我也使用迁移插件来创建我的表..看起来像使用这些工具没有问题。但是在我烘焙MVC之后,我的页面只有错误...
例如,$ bin \ cake烘焙所有测试
我发现没有错误,MVC在其特定文件夹,testController.php,testTable等中。
并在浏览器中 本地主机:8765个\测试
但我得到的只是不同错误的页面..我看到了
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的新手,英语不是我的母语,如果我无法正确解释我的问题,对不起。提前谢谢。
答案 0 :(得分:8)
正如Vishal Gajjar在评论中已经提到的那样,你使用保留关键字desc
作为你的列名,因此错误,它不是故障,它是你的。
为了能够使用这些保留字,需要正确引用列名,但CakePHP 3不再默认自动引用,因为这是一项昂贵的操作。
如果您坚持使用保留字,请通过quoteIdentifiers
配置中的app.php
选项启用标识符引用,或使用autoQuoting()
(enableAutoQuoting()
CakePHP 3.4)DB驱动程序的方法。
另见
答案 1 :(得分:1)
您可以在有问题的查询之前使用此代码:
$this->Tests->connection()->driver()->autoQuoting(true);
当你完成后,你可以关闭自动报价:
$this->Tests->connection()->driver()->autoQuoting(false);
如此糟糕的表现只会出现问题查询。
答案 2 :(得分:-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
如果您使用关键字,请在方括号[ ]