【问题标题】:Inserting error in mysql query using python使用python在mysql查询中插入错误
【发布时间】: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 注入的攻击。

标签: python mysql


【解决方案1】:

我假设id 在输入时以某种形式给出!因此,您始终可以检查所需的格式并只允许所需的格式!这是为了避免 SQL 注入!因此,如下所示的自然格式应该可以完成工作!这是非常基本的级别检查!

id_in = input("Here is the id taken " )  ## can be through any source . It is just an example 

if isinstance(id_in,int): ##Please mention the required format here I am assuming it as integer
    cursor.execute("INSERT INTO api.mytable(id) VALUES (%s);", (id_in))
else:
    ##do some  stuff here 

【讨论】:

  • 感谢您的回答,但是由于我有多个输入,此解决方案不太合适。我刚刚修好了。
  • 应该是[id_in]或(id_in,)(加逗号使其成为元组)。
猜你喜欢
  • 2021-02-25
  • 2013-07-11
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
相关资源
最近更新 更多