MySQL參數化有效防止SQL注入

  • sql語句的參數化,能夠有效防止sql注入
  • 注意:此處不一樣於python的字符串格式化,所有使用%s佔位
    from pymysql import *
    
    def main():
    
        find_name = input("請輸入物品名稱:")
    
        # 建立Connection鏈接
        conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8')
        # 得到Cursor對象
        cs1 = conn.cursor()
    
    
        # # 非安全的方式
        # # 輸入 " or 1=1 or "   (雙引號也要輸入)
        # sql = 'select * from goods where name="%s"' % find_name
        # print("""sql===>%s<====""" % sql)
        # # 執行select語句,並返回受影響的行數:查詢全部數據
        # count = cs1.execute(sql)
    
        # 安全的方式
        # 構造參數列表
        params = [find_name]
        # 執行select語句,並返回受影響的行數:查詢全部數據
        count = cs1.execute('select * from goods where name=%s', params)
        # 注意:
        # 若是要是有多個參數,須要進行參數化
        # 那麼params = [數值1, 數值2....],此時sql語句中有多個%s便可 
    
        # 打印受影響的行數
        print(count)
        # 獲取查詢的結果
        # result = cs1.fetchone()
        result = cs1.fetchall()
        # 打印查詢的結果
        print(result)
        # 關閉Cursor對象
        cs1.close()
        # 關閉Connection對象
        conn.close()
    
    if __name__ == '__main__':
        main()
相關文章
相關標籤/搜索