当前位置: 首页 > 面试题库 >

MySQL参数化查询

马德厚
2023-03-14
问题内容

我很难使用MySQLdb模块将信息插入到我的数据库中。我需要在表中插入6个变量。

cursor.execute ("""
    INSERT INTO Songs (SongName, SongArtist, SongAlbum, SongGenre, SongLength, SongLocation)
    VALUES
        (var1, var2, var3, var4, var5, var6)

""")

有人可以帮我这里的语法吗?


问题答案:

提防对SQL查询使用字符串插值,因为它不能正确地转义输入参数,并使您的应用程序容易受到SQL注入漏洞的影响。
这种差异看似微不足道,但实际上它是巨大的

不正确(存在安全问题)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s" % (param1, param2))

正确(带有转义符)

c.execute("SELECT * FROM foo WHERE bar = %s AND baz = %s", (param1, param2))

这增加了混乱,即用于绑定SQL语句中的参数的修饰符在不同的DB
API实现之间有所不同,并且mysql客户端库使用printf样式语法而不是更普遍接受的’?’。标记(例如,使用python-sqlite)。



 类似资料:
  • 问题内容: 我很难使用MySQLdb模块将信息插入到数据库中。我需要在表中插入6个变量。 有人可以帮我这里的语法吗? 问题答案: 提防对SQL查询使用字符串插值,因为它不能正确地转义输入参数,并使您的应用程序容易受到SQL注入漏洞的影响。这种差异看似微不足道,但实际上它是巨大的。 不正确(存在安全问题) 正确(带有转义符) 这增加了混淆,用于绑定SQL语句中的参数的修饰符在不同的DB API实现之

  • 问题内容: 在绝对紧急的情况下,我试图浏览我的网站并添加参数化查询。我是新手,才刚刚了解它们。 我的问题是,我对连接类型知之甚少,我看到的所有示例都在使用另一种连接方法,这使我感到困惑。我不想改变连接数据库的方式,因为它在很多页面上,我只是想更新我的查询以使其更安全。 这就是我一直连接到数据库的方式: 这是带有参数的SQL位: 显然它不起作用,但是我需要知道我是否可以使用已有的连接真正实现此目标,

  • 问题内容: 我有下面的代码(我包括了我认为所有相关的部分): 运行此命令时,在添加第一个参数时会收到IndexOutOfBoundsException。我做错了什么? 问题答案: 尝试以下方法:

  • 问题内容: 我有一个查询,我试图填充我要参数化的CFChart: 这是我尝试过的: 当我将查询更改为此时,它将以某种方式破坏CFChart。屏幕上没有出现任何CFError,但是我的CFChart为空白。 我在查询中将其范围缩小到与此相关: 当我删除查询的此参数化部分并放入 有用。 谁能对此有所启发? 问题答案: 屏幕上没有出现任何CFError,但是我的CFChart为空白。 暂时忽略正确的方法

  • 问题内容: 我正在将几个已硬编码到应用程序中的查询转换为动态的参数化查询。我遇到一个特定的查询,该查询有一个子句: 第一个参数很简单,因为它只是一个普通参数: 但是,第二个参数是一个整数列表,表示需要更新的行的ID。如何为单个参数传递整数列表?或者,您将如何设置此查询,以使您不必每次调用时都完全构建它,并且可以防止SQL注入攻击? 问题答案: 您可以基于(可能)可变数量的参数“动态”构建参数化查询

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 谁能给我示例如何在MySQL / PHP中使用参数化查询的例子? 问题答案: 参数化查询本质上是抽象出所有输入的查询。这具有几个良好的副作用,例如使所有输入无害(即不可能进行有害注入),并且由于它是预先分析和编译的,因此在重复使用时使其更快,