无法将字符串插入MySQL表

时间:2016-11-18 21:21:47

标签: python mysql

我正在尝试将字符串插入到SQL表中,但插入后字符串值为空。我做错了什么,我该怎么做才能解决它?

这是我正在运行的python函数。

def newCharacter(usr):
    cur.execute("INSERT INTO stats (user, level, exp, hp, attack, luck, aggro, hpregen) VALUES ('{}', 1, 0, 100, 10, 50, 50, 0)".format(usr))

下面是使用上述stats函数插入两行后我的newCharacter表的示例。第一列(下面是空白的)应该包含一个字符串(例如"用户名")。

     |     1 |   0 | 100 |     10 |   50 |    50 |       0 |
     |     1 |   0 | 100 |     10 |   50 |    50 |       0 |

2 个答案:

答案 0 :(得分:1)

我不确定是什么问题,但你写的内容容易受到SQL injection attack的攻击。 “通过将变量连接在一起进行SQL查询”(以及.format计为连接)的任何形式都容易受到SQL注入攻击。

相反,pass the variables in as parameters to .execute

cur.execute("INSERT INTO stats (user, level, exp, hp, attack, luck, aggro, hpregen) VALUES (?, 1, 0, 100, 10, 50, 50, 0)", usr)

several different types of parameter styles,可能不是?

答案 1 :(得分:0)

一般来说,当用户来自数据库时,对数据库的输入进行清理非常重要。如果用户可以输入任何他们喜欢的内容,您可以找到控制字符和语法上有意义的输入。即使您有客户端验证,这也是如此。

您正在使用的MySQL驱动程序非常容易实现:

cur.execute("INSERT INTO stats (user, level, exp, hp, attack, luck, aggro, hpregen) VALUES (%s, 1, 0, 100, 10, 50, 50, 0)", usr)

这将允许您“逃避”有问题的角色。它还将确保插入的值被正确引用,我想这是你的问题。