传统上,SQL 语句广泛使用字符串作为参数值,导致潜在的 SQL 注入漏洞。不含字符串的 SQL 提供了一种更安全的 ,可以避免此类攻击。
使用参数化查询
参数化查询允许您在查询执行时提供参数值,而不是将它们嵌入到 SQL 语句本身中。例如,以下查询使用参数化查询来检索特定产品名称的产品信息:
sql
SELECT * FROM products WHERE name = ?
使用绑定变量
绑定变量使您可以将参数值绑定到 SQL 语句中的特定位置,从而进一步增强安全性。例如,以下代码使用 Python 绑定变量来执行参数化查询:
python
import mysql.connector
创建一个连接对象
connection = mysql.connector.connect(
host='localhost',
user='root',
password='password',
database='products'
)
创建一个游标对象
cursor = connection.cursor()
准备一个参数化查询
query = "SELECT * FROM products WHERE name = %s"
绑定变量
name = 'Product Name'
执行查询
cursor.execute(query, (name,))
提取结果
for row in cursor.fetchall():
print(row)
关闭游标并连接
cursor.close()
connection.close()
好处
SQL 语句不含字符串提供以下好处:
提高安全性:防止 SQL 注入攻击
提高性能:消除字符串连接开销
提高可移植性:兼容各种数据库管理系统