.format()奋斗。蟒蛇

时间:2017-11-02 19:11:20

标签: python mysql sql

我在.format()方面遇到了一些困难。

 tup = [fname,lname,email,pwd,coun,add]

con = db.connect('localhost', 'root', '', 'lora');
with con:
    cur = con.cursor()
    insert_sql = ('INSERT INTO EMPLOYEE(fname, lname, email, pwd, coun, add)  VALUES("%s", "%s", "%s", "%s", "%s", "%s" )'% (fname, lname, email,
                                                                                                              pwd, coun, add))
    cur.execute(insert_sql)

执行后,它会显示此错误。

    raise errorclass(errno, errval)
    pymysql.err.ProgrammingError: (1064, 'You have an error in your 
    SQL syntax; check the manual that corresponds to your MariaDB 
    server version for the right syntax to use near \'add)  
    VALUES("","ee","","de","","")\' at line 1'

1 个答案:

答案 0 :(得分:0)

我认为问题出在format()上。

我认为问题是 ADD 是MySQL保留字

请参阅MySQL参考手册:https://dev.mysql.com/doc/refman/5.6/en/keywords.html

要将保留字引用为标识符(例如列名),标识符将需要使用表名或表别名限定,或者(如INSERT语句的情况)

标识符需要转义

默认情况下,MySQL使用反引号字符来转义标识符,例如

 INSERT INTO ... ( ..., col, `add` ) VALUES 
                              ^  ^ 

(如果在ANSI_QUOTES中启用sql_mode,那么我们也可以使用双引号来转义标识符,就像Oracle使用的其他数据库一样。)

首选做法是避免使用保留字和关键字作为标识符。

代码中显示的模式似乎容易受到SQL注入攻击。 (我们不会发现SQL文本中包含的变量保证安全

最佳做法是将预备语句绑定占位符一起使用。

https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Introduction

Little Bobby Tables