【发布时间】:2019-12-14 09:47:11
【问题描述】:
我正在尝试以一种不易被注入的方式将值插入到一行 mysql 数据库中,但会给出我的语法错误。这是我的一段导致错误的代码:
cursor.execute("INSERT INTO api.mytable(id) VALUES (:id);", {"id": 1})
和错误:
连接错误:(1064,“您的 SQL 语法有错误; 检查与您的 MySQL 服务器版本相对应的手册 在第 1 行的 ':id)' 附近使用正确的语法")
代码请告诉我我的代码有什么问题?
【问题讨论】:
-
为什么不直接传递值而不是使用动态参数呢?比如格式化字符串并执行它。
-
首先是因为我需要在查询中添加外部参数,其次可能有助于避免注入攻击
-
@Braiano 使用
%(id)s而不是:id,即cursor.execute("INSERT INTO api.mytable(id) VALUES (%(id)s);", {"id": 1}) -
@SukumarRdjf 这是一个危险的建议,它容易受到 SQL 注入的攻击。