我正在尝试将字符串插入到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 |
答案 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)
答案 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)
这将允许您“逃避”有问题的角色。它还将确保插入的值被正确引用,我想这是你的问题。