【问题标题】:PHP Doctrine with MSSQL: Incorrect syntax near ':'带有 MSSQL 的 PHP 原则:':' 附近的语法不正确
【发布时间】:2019-01-03 07:43:52
【问题描述】:

我正在使用 MSSQL 服务器处理 Symfony 4 项目(不是最佳选择,而是公司决策)。

我们在使用命名变量时遇到了问题。

[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.

例如:

$query->where("status = :status");

我们使用 setParameter() 应用值

$query->setParameter('status', $status);

我们收到语法错误。我试图用变量本身存储引号以确保不是这种情况,但是它返回相同的错误。如果我用 ex: 'ACTIVE' 替换命名变量,它会按预期工作。我还使用 getSQL() 打印了 sql 并直接在 SQL Management Studio 中进行了测试,这也可以正常工作。

调试语句很粗糙,我正在考虑是否需要创建一个连接包装类并进行操作以支持 MSSQL,但在进行该扩展之前,也许你们中的一些人有一个想法?

完整的错误响应:

An exception occurred while executing 'SELECT U.CIID AS ciid, U.USERID as userid, U.FIRSTNAME as firstname, U.MIDDLENAME as middlename, U.LASTNAME as lastname, ACI.emailid as email, U.JOBTITLE as position, ACI.landline as phone_local, ACI.mobile as phone_mobile, P.ATTRIBUTE_1801 as phone_cisco FROM SDUSER U INNER JOIN AaaUser AU ON U.USERID=AU.USER_ID INNER JOIN People P ON U.CIID=P.CIID INNER JOIN AaaUserContactInfo AUCI ON AU.USER_ID=AUCI.USER_ID INNER JOIN AaaContactInfo ACI ON AUCI.CONTACTINFO_ID=ACI.CONTACTINFO_ID WHERE U.STATUS=:status':

SQLSTATE [42000, 102]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Incorrect syntax near ':'.
SQLSTATE [42000, 8180]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Statement(s) could not be prepared. (500 Internal Server Error)

如您所见,命名参数似乎强制使用 mssql 无法接受的整个 sql 的引号。

MSSQL 2012 PHP 7.1.3 Symfony 4 教义2

【问题讨论】:

  • 我相信混乱的引号只是您控制台中的编码问题。如果你仔细看,错误信息实际上是引用了冒号(“:”),它似乎以某种方式无法正确识别参数
  • 嗨,伊曼纽尔,我没有通过控制台运行。我同意这可能是因为该参数可能会被识别。但是我已经按照示例进行了操作,并且我的代码适用于 mariadb 和 postgresql,这只是切换到 mssql 时的问题

标签: php sql-server symfony doctrine


【解决方案1】:

也许你需要把这段代码放在下面:

ini_set('mssql.charset', 'UTF-8');

【讨论】:

  • 感谢您的建议,mssql.charset 已经设置为 UTF-8
猜你喜欢
  • 2021-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-19
  • 2015-12-12
  • 2013-12-16
  • 1970-01-01
  • 2018-08-14
相关资源
最近更新 更多