import pymysql class Db(object): def __init__(self): self.conn = pymysql.connect(host="192.168.0.58", user="root", password="123456", port=3306) self.cursor = self.conn.cursor() def __del__(self): self.cursor.close() self.conn.close() def execute_sql(self): name = input("请输入被查询人的姓名:") sql = F"select * from test1.user_info where name='{name}'" print(f"----->{sql}<------") self.cursor.execute(sql) # 自己拼装的SQL,在输入时使用特殊的传入值(比如:' or 1=1 or '1),能获取到数据表中的所有信息,也就是存在SQL注入的风险。 print(self.cursor.fetchall()) def secure_execute_sql(self): name = input("(安全)请输入被查询人的姓名:") sql = "select * from test1.user_info where name=%s" # print(f"----->{sql}<------") params = [name] # 将参数放入列表或元组中 self.cursor.execute(sql, params) # 使用execute方法拼装SQL语句,防SQL注入 print(self.cursor.fetchall()) def main(): db = Db() while True: db.execute_sql() db.secure_execute_sql() if __name__ == "__main__": main()
执行结果: