【问题标题】:SQLSTATE[HY000]: General error: 20018 Incorrect syntax near '='SQLSTATE [HY000]:一般错误:20018 '=' 附近的语法不正确
【发布时间】:2018-07-03 19:35:19
【问题描述】:

我正在处理的 Laravel 项目中遇到一个奇怪的错误。

SQLSTATE[HY000]:一般错误:20018 '=' 附近的语法不正确。 [20018](严重性 15)[(null)](SQL:更新 [plan_part] 设置 [is_corrosion_protection_required] = 0,[modified_date] = 2018-01-24 11:47:03 其中 [plan_part_id] = 131996)

它发生在我的测试服务器上,但在本地它正在运行。测试服务器运行 PHP 7.1.10,本地主机是运行 7.0.10 的 WAMP。

我不明白为什么这会导致错误。语法似乎是正确的。我只是使用 Laravel 的 eloquent 模型保存到数据库,我很确定这只是一个 PHP PDO 绑定参数语句。

奇怪的是,如果我调整 is_corrosion_protection_required 以外的其他属性,我可以在测试服务器上保存。该属性是数据库中的 bit 属性。我尝试将其更改为使用 true/false、1/0、'1'/'0' 和 'yes'/'no',但它没有解决任何问题。

我在另一个位字段上遇到了同样的问题,所以我认为它与此有关,但我不知道我需要做什么或从这里去哪里。

希望有人能提供一些线索,让我知道我还可以尝试什么,或者我需要做什么才能在 localhost 和测试服务器上运行。

我不认为更新更多的 7.1 版本是一个大问题,但我对服务器管理了解不多。

【问题讨论】:

  • 只是一个想法,买它可能是日期字符串弄乱了你..你使用的是同一个数据库服务器吗?可能严格查询是用一个而不是另一个打开的?这似乎不是 PHP 问题。
  • 我已将我建议的解决方案移至 cmets。请参阅此解决方案:我建议 Quantastical 在服务器上尝试修补程序或 OLE 提供程序的新版本。 support.microsoft.com/en-us/help/2465092/… 我遇到过类似的问题,我通过使用不同的数据提供者解决了。
  • @Zak 感谢您的评论。我还认为这可能与日期有关,因为我们过去在日期方面遇到了一些问题。我尝试修改 Eloquent 的 SqlGrammar 文件中的日期格式,但无济于事。我认为它与位更相关,因为我能够保存其他基于 varchar/integer 的属性,我认为这些属性也包括 modified_date 值。两个环境都连接到同一个数据库。
  • 我能够确认它与日期字段无关,因为即使我在 Eloquent 模型中包含 public $timestamps = false,错误仍然存​​在。新查询没有任何日期字段,它仍然会被炸掉。

标签: php sql-server laravel pdo eloquent


【解决方案1】:

经过数小时的研究,我得出的结论是,我们的问题不在于错误消息中概述的原始查询。

存在与相关表关联的触发器,这些触发器可能是问题的根本原因。我无法确定究竟是什么引发了错误,但我们的 DBA 审查了触发器并禁用了它们,从而使一切恢复正常。

感谢所有 cmets 和帮助我审查我的想法。

【讨论】:

    【解决方案2】:

    这个问题是charset引起的!

    execute [ iconv(); ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 2012-10-25
      相关资源
      最近更新 更多