在没有ORM的情况下更新MySQL中的行

时间:2016-06-09 10:26:13

标签: python mysql flask

为什么我得到了uid的价值

在flask调试控制台中使用

<input id="userId" name="userId" type="text" value= {{ un[usernumber][0] }} >

但是在使用mysql.connection.cursor()?

时会出错

请帮我弄清楚为什么会发生并修复它。

https://ideone.com/TtKdJx

        cur = mysql.connection.cursor()
        cur.execute(
            "UPDATE User SET email='" +
            form.email.data +
            "', phone='" +
            form.phone.data +
            "', mphone='" +
            form.mphone.data +
            "', status='" +
            form.status.data + 
            #"' WHERE userId='12' ") # ok

            "' WHERE userId='" + uid + "' ")  
            # TypeError: int() argument must be a string or a number, 
            # not 'NoneType' 
            # and IOError: [Errno 32] Broken pipe

        rv = cur.fetchall()
        mysql.connection.commit()
        return 'ok'

调试控制台:

#right,我们得到了所需的值

 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: ...-...-...
uid: 2
127.0.0.1 - - [09/Jun/2016 17:20:28] "GET /edit?i=1 HTTP/1.1" 200 -

1 个答案:

答案 0 :(得分:0)

一定不能这样做。有关原因,请参阅Little Jonny Tables

请使用旨在阻止此类攻击的数据库API的工具。除了安全优势之外,您的代码将更简单,更容易理解。

cur.execute(
    "UPDATE User SET email=%s, phone=%s, mphone=%s, status=%s WHERE userId=%s",
    (form.email.data, form.phone.data, form.mphone.data, form.status.data, uid)
)