【发布时间】: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