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

向MySQL插入数据因单引号引发语法错误,求可行插入方案

解决MySQL插入含单引号数据的语法错误

问题场景

执行以下SQL插入语句时触发语法错误:

INSERT INTO birthday(team, birthday)
VALUES ('Norway', {"2020-01-01": "Ram's BDay"}));

报错信息:

ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server ver

已确认错误由Ram's BDay中的单引号导致,且无法控制数据流中的单引号,如何实现正常插入?

解决方案

1. 使用参数化查询(推荐)

这是最安全、规范的做法,既能避免SQL注入,又能自动处理单引号等特殊字符。以Python的mysql-connector驱动为例:

import mysql.connector

# 建立数据库连接
db = mysql.connector.connect(host="your_host", user="your_user", password="your_pwd", database="your_db")
cursor = db.cursor()

# 定义带占位符的SQL语句
sql = "INSERT INTO birthday(team, birthday) VALUES (%s, %s)"
# 准备插入数据,无需手动转义
data = ('Norway', '{"2020-01-01": "Ram\'s BDay"}')

# 执行并提交
cursor.execute(sql, data)
db.commit()

# 关闭连接
cursor.close()
db.close()

参数化查询会由数据库驱动自动处理字符串中的特殊字符,完全规避语法错误和注入风险。

2. 手动转义单引号(仅应急使用)

如果必须拼接SQL字符串(不推荐,存在SQL注入风险),可以按照MySQL的规则,将单引号替换为两个连续单引号:

original_data = '{"2020-01-01": "Ram\'s BDay"}'
# 转义单引号
escaped_data = original_data.replace("'", "''")
# 拼接SQL语句
sql = f"INSERT INTO birthday(team, birthday) VALUES ('Norway', '{escaped_data}');"

这种方法仅适用于临时场景,无法应对所有特殊字符,且存在安全隐患。

3. 确认字段类型适配

如果birthday字段定义为JSON类型,确保插入的是合法JSON格式的字符串。参数化查询依然适用,部分驱动支持直接传入Python字典并自动转换为JSON格式存储。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:25:35