mysqldb有處理sql語句的轉義方法, 我們不用再考慮關於字符轉義的問題
在接收到客戶端用戶發送的表單之後, 如果需要根據用戶輸入來獲取數據, (即需要把用戶提交的一些數據作爲sql語句的一部分), 如果是這樣的話, 我們需要對其防注入處理.
利用MySQLdb.escape_string()方法對用戶輸入字段進行轉義
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='root', passwd='', db='test')
user_keyin = 'aaa'
user_keyin = MySQLdb.escape_string(user_keyin)
cur = conn.cursor()
cur.execute("select * form table where col="+user_keyin+"")
我們先把user_keyin(用戶輸入)的字符串用MySQLdb.escape_string()轉義,然後把它加進作爲execute的參數sql語句裏.'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
# 把它放到代碼最前面
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
利用execute的第二個參數
#前面代碼省略
# 這是有效的
cur.execute('select * from table where col=%s',(user_keyin,))
# 這是無效的,請仔細對比一下參數
cur.execute('select * from table where col=%s'% (user_keyin,))
請注意! 第一個參數是sql語句, 而需要插入user_keyin部分則用%s代替(不需要加引號), 還有一個, 如果你是用python的字符串拼接的話, 是無效的, 因爲只有一個參數輸入.