Sqlite插入单引号和双引号,防止sql注入
为了防止SQL注入,在构建SQL语句时,应该使用参数化查询。在SQLite中,可以使用问号(?)作为参数的占位符。
以下是一个使用参数化查询插入数据到SQLite数据库的例子,它同时展示了如何插入包含单引号和双引号的数据,而不会引起SQL注入:
import sqlite3
# 连接到数据库(如果不存在,则会创建)
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 创建一个简单的表
cursor.execute('''
CREATE TABLE IF NOT EXISTS data (
id INTEGER PRIMARY KEY,
text TEXT
)
''')
# 插入数据,使用参数化查询防止SQL注入
text_with_quotes = "O'Reilly"
text_with_double_quotes = 'He said, "Hello, World!"'
# 使用问号作为参数占位符
cursor.execute('INSERT INTO data (text) VALUES (?)', (text_with_quotes,))
cursor.execute('INSERT INTO data (text) VALUES (?)', (text_with_double_quotes,))
# 提交事务
conn.commit()
# 关闭连接
cursor.close()
conn.close()
在这个例子中,我们使用问号(?)作为占位符,然后在execute
方法中提供参数。这种方式会确保无论用户输入什么样的数据,SQLite都会将其当做一个参数值,而不会尝试将其解释为SQL代码的一部分。这样可以有效地防止SQL注入攻击。
评论已关闭