grant all on *.* to 'root'@'%'identified by '123'; flush privileges; # 刷新
##### mysql模塊基本使用mysql
import pymysql user = input('用戶名: ').strip() pwd = input('密碼: ').strip() conn = pymysql.connect( host='192.168.31.80', port=3306, user='root', password='123', db='luffy', charset='utf8' ) # 拿到遊標 cursor = conn.cursor() # 執行sql語句 sql = 'select * from userinfo where user="%s" and pwd="%s"' % (user, pwd) # 不用這招,會致使sql注入問題 rows = cursor.execute(sql) cursor.close() conn.close() # 進行判斷 if rows: print('登錄成功') else: print('登錄失敗')
根本原理:就根據程序的字符串拼接name='%s',咱們輸入一個xxx' -- haha,用咱們輸入的xxx加'在程序中拼接成一個判斷條件name='xxx' -- haha'sql
最後那一個空格,在一條sql語句中若是遇到select * from t1 where id > 3 -- and name='egon';則--以後的條件被註釋掉了 #一、sql注入之:用戶存在,繞過密碼 egon" -- 任意字符 #二、sql注入之:用戶不存在,繞過用戶與密碼 xxx" or 1=1 -- 任意字符
import pymysql user = input('用戶名: ').strip() pwd = input('密碼: ').strip() conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', db='luffy', charset='utf8' ) # 拿到遊標 cursor = conn.cursor() # 執行sql語句 sql = 'select * from userinfo where user=%s and pwd=%s' # %s 去掉引號,pymysql會自動添加 rows = cursor.execute(sql, [user, pwd]) cursor.close() conn.close() # 進行判斷 if rows: print('登錄成功') else: print('登錄失敗')
import pymysql conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', db='luffy', charset='utf8' ) # 拿到遊標 cursor = conn.cursor() sql = 'insert into userinfo(user, pwd) values(%s, %s)' rows = cursor.execute(sql, ('test', '111')) # 插一條 # rows = cursor.executemany(sql, [('yxx', '123'), ('egon1', '12345')]) # 插多條記錄 print(rows) print(cursor.lastrowid) # 最後一個插入的id conn.commit() cursor.close() conn.close()
import pymysql # 創建連接 conn=pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', db='luffy', charset='utf8' ) # 拿遊標 cursor = conn.cursor(pymysql.cursors.DictCursor) # cursor以字典形式 rows = cursor.execute('select * from userinfo') # print(rows) # print(cursor.fetchmany(2)) # res1 = cursor.fetchone() # res2 = cursor.fetchone() # res3 = cursor.fetchone() # res4 = cursor.fetchone() # print(res1) # print(res4) cursor.scroll(3, mode='absolute') # 相對絕對位置移動 cursor.scroll(3, mode='relative') # 相對當前位置移動 res5 = cursor.fetchone() print(res5) cursor.close() conn.close()