MySQL中的模糊查询是通过LIKE
关键字实现的,它允许你使用通配符来匹配字符串中的数据。单引号在SQL语句中用于定义字符串常量。
模糊查询的优势在于它提供了灵活的数据检索方式,尤其是当用户不确定或不记得确切的数据时。例如,在搜索用户输入的部分名称或地址时非常有用。
模糊查询主要有以下几种类型:
模糊查询常用于以下场景:
原因:当用户输入的数据未经验证或转义直接拼接到SQL语句中时,恶意用户可以通过输入特定的字符串(如' OR '1'='1
)来改变原始查询的意图,导致SQL注入攻击。
解决方法:
SELECT * FROM users WHERE name LIKE CONCAT('%', ?, '%');
在Python中,可以使用mysql-connector-python
库来实现参数化查询:
import mysql.connector
cnx = mysql.connector.connect(user='user', password='password', host='host', database='database')
cursor = cnx.cursor()
query = "SELECT * FROM users WHERE name LIKE CONCAT('%', %s, '%')"
cursor.execute(query, ('John',))
for row in cursor:
print(row)
cursor.close()
cnx.close()
SELECT * FROM users WHERE name LIKE CONCAT('%', REPLACE(REPLACE(%s, '\\', '\\\\'), "'", "\\'"), '%');
通过以上方法,可以有效避免模糊查询中的SQL注入风险,同时保证查询的灵活性和安全性。
领取专属 10元无门槛券
手把手带您无忧上云