pymysql防止SQL注入的方法

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()

执行结果:

猜你喜欢

转载自www.cnblogs.com/testlearn/p/12497074.html