SQL中LIKE命令查询报MariaDB语法错误的修复方法
问题原因
报错直接来自SQL语法错误,另外代码里还有一处隐藏的传参bug:
- 核心语法错误:
LIKE是SQL独立的模糊匹配操作符,不需要和等号搭配使用。你写的LIKE = %s是非法写法,MariaDB解析到LIKE关键字后,本来预期后面接匹配模式,结果读到了多余的=,直接抛出语法错误,报错信息里提示的near '= %s'就是指这个多余的等号位置。 - 隐藏传参bug:Python里单元素元组必须在元素后面加逗号,你写的
val = (n)根本不是元组,就是变量n本身,就算改对SQL语法,这里传参格式不对也会触发执行错误。另外LIKE需要的通配符(%匹配任意多字符、_匹配单个字符)不能硬拼在SQL语句里,要放到参数值中,不然会失去参数化查询的防注入能力。
修复方法
按下面三点调整即可:
- 删掉LIKE后面多余的等号,修正SQL基础语法
- 给单元素元组补上末尾的逗号,符合Python的元组语法要求
- 把你需要的模糊匹配通配符,拼到传入的参数值里,不要直接写在SQL字符串中
修复后的代码参考:
# 按需调整通配符位置即可: # 前缀匹配:f"{n}%" 后缀匹配:f"%{n}" 包含匹配:f"%{n}%" match_val = f"%{n}%" sql = '''SELECT Name FROM newtest WHERE Name LIKE %s''' val = (match_val,) # 注意单元素元组末尾的逗号不能丢 myobj = mycurs.execute(sql, val)
避坑提醒:千万别图省事写成
LIKE '%%s%'这种直接把通配符拼在SQL语句里的形式,会直接绕过参数化查询的防护,存在SQL注入风险。
内容的提问来源于stack exchange,提问作者user18314494
相关产品推荐
相关产品推荐

