You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用MySQL存储过程传入JSON字符串触发语法错误求助

解决MySQL存储过程createRequisition的JSON参数语法错误问题

问题根源

从报错信息一眼就能定位问题:你传入的locationsString参数里的JSON内容没有正确处理,MySQL解析SQL语句时,把JSON里的双引号"当成了字符串的结束标记,直接打乱了整个INSERT语句的语法结构。

看你传入的locationsString片段:

(reqId,137,137,137,2,2,2,493,{"billToId":137,"shipToId":137,...})

这里最后一个字段是JSON对象,但完全没有用单引号包裹,MySQL根本没法识别这是一个完整的字符串值,自然会抛出语法错误。

解决方案

你需要修改调用参数中的locationsString,把JSON对象用单引号括起来,确保MySQL能正确识别它是一个字符串类型的字段值。因为整个locationsString是用单引号作为外层包裹的,所以内部包裹JSON的单引号需要用反斜杠\转义。

修改后的完整调用示例:

call createRequisition(
  5,
  null,
  '(reqId,137,137,137,2,2,2,493,\'{"billToId":137,"shipToId":137,"loadingId":137,"loadingLocationId":2,"billToLocationId":2,"shipToLocationId":2,"skuId":493,"skuWeight":30,"loadingbranchName":"New Branch ","loadingCompanyName":"Teja & Teja Pvt. Ltd","loadingErpCode":"WERT","loadingShortName":"Kolkata","loadingLongName":"West Bengal, India","shipToCompanyName":"Teja & Teja Pvt. Ltd","shipTobranchName":"New Branch ","shipToErpCode":"WERT","shipToShortName":"Kolkata","shipToLongName":"West Bengal, India","billToBranchName":"New Branch ","billToCompanyName":"Teja & Teja Pvt. Ltd","billToErpCode":"WERT","billToShortName":"Kolkata","billToLongName":"West Bengal, India","skuQuantity":10}\')',
  10,
  null,
  '2019-10-18',
  '111',
  'Just Do It',
  '17',
  2,
  'Open Daala zzz',
  1,
  'HIGH',
  null
);

额外安全提醒

你的存储过程用了动态SQL拼接生成INSERT语句,这种写法存在SQL注入风险。建议要么在传入locationsString前做严格的内容校验和转义,要么改用参数化查询的方式替代动态拼接,避免恶意输入破坏业务逻辑或泄露数据。

比如可以在存储过程里先对JSON内容做转义处理:

-- 转义JSON里的双引号,避免打乱SQL语法
set locationsString = replace(locationsString, '"', '\\"');

内容的提问来源于stack exchange,提问作者user12188450

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:23:10