2016-11-18 35 views
1

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

这是我正在运行的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 | 
+1

您能否在您的问题中添加特定的错误消息或您收到的结果,并解释它们与预期的不同之处? – ecounysis

+0

可能是默认自动提交被关闭,你需要做'cursor.commit()' –

+0

'usr'的值是什么? – ecounysis

回答

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,它可能不是?

+0

谢谢你,你会怎么建议我在表中添加一个变量呢? – ZodiacV1

+0

@ ZodiacV1就像我写的。 – Schwern

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) 

这将让你“逃离”问题的字符。它也将确保插值的值被正确引用,我想这是你的问题。

相关问题