如何在SQL LIKE查询中传入值?UPDATE前缀匹配场景答疑
解决方法
要实现author字段的值以传入的phone变量开头,你需要利用LIKE子句的通配符%,但必须通过参数化查询传递带通配符的内容——绝对不能直接拼接SQL字符串,否则会引发严重的SQL注入风险。
修改后的代码示例如下(以Python的参数化查询为例):
"UPDATE xxx SET status = (%s) WHERE author LIKE (%s)", ("OK", f"{phone}%")
如果是其他语言(比如Java JDBC、PHP PDO等),核心逻辑完全一致:把phone + "%"作为第二个参数传递给查询,而不是在SQL语句里硬编码通配符。
关键细节说明
- 安全性优先:参数化查询会让数据库自动处理参数的转义逻辑,彻底避免恶意输入篡改SQL结构的风险。
- 灵活性更高:如果之后需要调整匹配规则(比如匹配以
phone结尾、或包含phone的内容),只需要修改参数里的通配符位置(比如%{phone}或%{phone}%),无需改动SQL语句本身。
绝对要避免的错误写法
千万不要用以下方式实现,它们都会把你的程序暴露在SQL注入攻击下:
# 错误:直接在SQL语句里拼接通配符,仍有注入风险 "UPDATE xxx SET status = (%s) WHERE author LIKE %s%%", ("OK", phone)
# 极度危险:直接字符串拼接SQL,完全没有防护 f"UPDATE xxx SET status = 'OK' WHERE author LIKE '{phone}%'"
内容的提问来源于stack exchange,提问作者Artem Andreev
相关产品推荐
相关产品推荐

