【问题标题】:mssql+php prepared statements incorrect syntax using %mssql+php 使用 % 准备语句不正确的语法
【发布时间】:2015-10-07 13:02:14
【问题描述】:

我有这个小代码sn-p:

$sql .= " (cOriginalFilename LIKE %?%)";

这是完整的查询:

Select  cMsgID, 
        cDocType, 
        cOriginalFilename, 
        cSubAddress1, 
        cRecipientID, 
        cSenderID, 
        cStatus, 
        cStatusDateTime
From    tMessages
Where   (cOriginalFilename LIKE %?%)

确切的错误信息:

Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 102 [code] => 102 [2] => [Microsoft][ODBC Driver 11 for SQL服务器][SQL Server]'@P1' 附近的语法不正确。[消息] => [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]'@P1' 附近的语法不正确。))

如您所见,它正在编写一个准备好的语句,但它给了我一个无效的语法错误。当我删除 %s 时,它可以工作。我应该如何修改语法以使用 %s?我找不到有关此主题的任何信息。

注意:这是php和mssql

【问题讨论】:

  • @Siyual 谢谢你,成功了!我从不擅长弄清楚语法。如果您发表评论作为答案,我很乐意选择它作为解决答案。
  • 领先你一步,哈哈。没有问题:)
  • stackoverflow 对我来说刷新得很奇怪 :)

标签: php sql sql-server syntax


【解决方案1】:

您已经接近了 - 只需为此引用 % 通配符:

Select  cMsgID, 
        cDocType, 
        cOriginalFilename, 
        cSubAddress1, 
        cRecipientID, 
        cSenderID, 
        cStatus, 
        cStatusDateTime
From    tMessages
Where   (cOriginalFilename LIKE '%' + ? + '%')

【讨论】:

    【解决方案2】:

    % 符号需要放在您分配给参数的变量中,而不是在查询中。

    【讨论】:

    • 我觉得这个解释也不错。我通常将% 放在值中。
    • Ty @Evert ,想知道为什么我被否决了。但我不是唯一一个使用这个的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2012-07-17
    相关资源
    最近更新 更多