我有一个PHP(CODEIGNITER)应用程序,它通常部署在Apache / MySQL组合上。我最近在IIS8和MS SQL 11.0.2100.60
上部署了它我使用ODBC连接迁移表和数据以迁移到Access数据库,然后再迁移另一个ODBC连接以迁移到MS SQL。我修改了我的PHP应用程序(PHP.ini,database.php,db_driver.php)的配置,以确保它正确连接并在IIS上运行。
我现在遇到SQL语法问题。当我尝试运行应用程序时,它不会给我数据库连接错误(它之前给出的)但是当我尝试登录到应用程序时(它有用户身份验证) - 我收到以下错误:
Error Number: 42000
[Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near '`'.
SELECT * from ctbl_events WHERE 2017-01-11 <= startdate AND `enddate` >= 2017-01-11 and status=0 ORDER BY `ctbl_events`.`id`
Filename: C:\inetpub\wwwroot\GMS\system\database\DB_driver.php
Line Number: 330
这是否意味着问题是`符号,如果是,我必须手动去修改我的应用程序中的所有SQL查询(这将是一个巨大的任务)或有任何方法来处理这个。
答案 0 :(得分:2)
据我所知,SQL Server不支持使用反引号来转义表名或列名(您可以使用括号代替)。您可以通过运行像
这样的简单查询轻松尝试此操作select * from `ctbl_events`
如果这不起作用,您几乎肯定必须更新所有查询以用括号替换反引号。
查询可能失败的第二个原因是查询中的日期必须用引号括起来,并且与SQL Server的日期格式匹配(这是可配置的,因此您可能需要进行一些实验)。
因此,您尝试运行的查询应该看起来像这样:
SELECT * from ctbl_events
WHERE '2017-01-11' <= startdate
AND [enddate] >= '2017-01-11'
and status=0
ORDER BY [ctbl_events].[id]
虽然在这种情况下,你并不需要围绕表格或列名称的括号 - 最好同意这个标准并坚持下去。