產生原因: 後台將使用者提交的帶有惡意的資料和sql進行字串方式的拼接,從而影響了sql語句的語義,最終產生資料洩露的現象。 如果防止: sql語句的引數化, 將sql語句的所有資料引數存在乙個列表中傳遞給execute函式的第二個引數
注意
from pymysql import connect
classjd(
object):
def__init__
(self)
:# 建立和資料庫伺服器的連線 伺服器位址、埠、戶名、密碼、資料庫名、通訊使用字元和資料庫字符集一致
conn = connect(host=
'localhost'
, port=
3306
, user=
'root'
, password=
'mysql'
, database=
'jing_dong'
, charset=
'utf8'
)# 獲取游標
self.cursor = conn.cursor(
)def
__del__
(self)
: self.cursor.close(
) self.conn.close(
)def
excute_sql
(self,sql)
: self.cursor.execute(sql)
for temp in self.cursor.fetchall():
print
(temp)
# # 非安全的方式
# # 輸入 " or 1=1 or " (雙引號也要輸入)
# sql = 'select * from goods where name="%s"' % find_name
# print("""sql===>%s<====""" % sql)
# # 執行select語句,並返回受影響的行數:查詢所有資料
# count = cs1.execute(sql)
# 安全的方式
# 構造引數列表
# 執行select語句,並返回受影響的行數:查詢所有資料
# args = "goods"
# sql = "select * from %s;"%(args,)
# 注意:
# 如果要是有多個引數,需要進行引數化
# 那麼params = [數值1, 數值2....],此時sql語句中有多個%s即可
defshow_all_items
(self)
: args =
"goods"
sql =
"select * from %s;"
%(args,
) self.excute_sql(sql)
defshow_cates
(self)
: args =
"goods"
sql =
"select cate_name from %s;"
%(args,
) self.excute_sql(sql)
defshow_price
(self)
: args =
"goods"
sql =
"select price from %s;"
%(args,
) self.excute_sql(sql)
defprint_menu
(self)
:print
("-----京東-----"
)print
("1:查詢所有的商品的資訊"
)print
("2.查詢所有商品的分類資訊"
)print
("3.查詢所有商品的**"
)print
("4.新增商品種類"
)print
("5.根據id查詢商品資訊"
)print
("6.根據id查詢商品資訊保安方式"
)return
input
("請輸入功能對應的序號:"
)def
run(self)
:# 迴圈乙個查詢選單
while
true
: num = self.print_menu(
)if num ==
"1":
# 查詢所有的商品的資訊
self.show_all_items(
)elif num ==
"2":
# 查詢所有商品的分類資訊
self.show_cates(
)elif num ==
"3":
# 查詢所有商品的**
self.show_price(
)if num ==
"4":
# 新增商品種類
pass
elif num ==
"5":
# 根據id查詢商品資訊
pass
elif num ==
"6":
# 根據id查詢商品資訊保安方式
pass
else
:print
("輸入有誤,請重新輸入。。。"
)def
main()
:# 建立乙個京東**的物件
jd = jd(
)# 呼叫這個物件的run方法,讓其執行
jd.run(
)if __name__ ==
'__main__'
: main(
)
python3 函式引數
python函式引數包括五種型別 位置引數 預設引數 可變引數 關鍵字引數以及命名關鍵字引數。位置引數例如 def ex y y就是位置引數 例子 def ex y print y ex 2 預設引數 可以簡化函式的呼叫,設定預設引數時,要注意 一 必選引數在前,預設引數在後 二當函式有多個引數時,...
python3學習 列表方法
列表是python中最基本的資料結構,列表是最常用的python資料型別,列表的資料項不需要具有相同的型別。列表中的每個元素都分配乙個數字 它的位置,或索引,第乙個索引是0,第二個索引是1,依此類推。一 建立乙個列表 li 二 訪問列表中的值 li 下標 或 例如 li 1 4 擷取 四 刪除列表元...
python3學習筆記 列表
列表 陣列 定義列表 list 向列表增加元素a print list a b c d 插入元素 list.insert 0,aa 在第1個元素前插入乙個元素 print list aa a b c d 獲取元素 list n 修改元素 list 0 m 直接向元素賦值 print list m a...