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

Gammu插入收件箱时MySQL报错:SenderNumber含单引号值如何解决?

解决Gammu插入Inbox时SenderNumber含单引号的MySQL语法错误

这个问题我太熟了!本质就是字符串里的单引号把SQL语句的结构搞崩了——MySQL会把'WENDY'S'当成'WENDY'加上一个多余的S',自然就报错了。别担心,用Gammu的自定义参数化查询就能搞定,之前你看文档可能没抓对重点,我给你一步步来:

步骤1:修改Gammu SMSD配置文件

找到你的Gammu配置文件(一般是/etc/gammu-smsdrc,如果是自定义部署就找对应路径的文件),打开后定位到[smsd]段落,添加或修改InsertInbox的自定义查询:

[smsd]
# 其他原有配置保持不变
InsertInbox = INSERT INTO inbox (ReceivingDateTime, Text, SenderNumber, Coding, SMSCNumber, UDH, Class, TextDecoded, RecipientID) VALUES (%R, %t, %n, %c, %S, %u, %C, %T, %i)

关键说明:用Gammu预定义占位符替代直接拼接

这里的%R、%n等都是Gammu内置的占位符,它们不会直接把值硬拼进SQL语句,而是通过参数化查询的方式安全传递给MySQL,自动处理单引号、特殊字符的转义问题。每个占位符对应字段的含义:

  • %R → 接收时间(对应ReceivingDateTime)
  • %t → 原始短信二进制文本(Text字段)
  • %n → 发送方号码(SenderNumber,就是你出问题的字段)
  • %c → 短信编码方式(Coding)
  • %S → SMSC中心号码(SMSCNumber)
  • %u → UDH头部数据(UDH)
  • %C → 短信类别(Class)
  • %T → 解码后的可读文本(TextDecoded)
  • %i → 接收者ID(RecipientID)

步骤2:重启Gammu服务生效

修改完配置后,重启gammu-smsd服务让新配置生效:

sudo systemctl restart gammu-smsd

之后再测试发送来自'WENDY'S'这类带单引号的号码的短信,就不会再出现SQL语法错误了——Gammu会自动帮你把单引号转成MySQL支持的''格式,或者用参数绑定完全规避字符串拼接的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:21:00