pythoncgi脚本只在mysql数据库中插入整数

2024-05-21 08:50:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始用Python编写脚本,遇到了一个奇怪的问题。在

我试图在mysql数据库中插入一些值。 数据库字段为varchar、utf-8unicode

使用python3.2和wampserver2.2(apache 2.2.21,mysql 5.5.20)

如果我尝试print(ime)、print(prezime)等,它会从另一个页面打印表单的值,所以我得到的值是正确的。在

如果我将sql语句写为:

"INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES ("aa","aa","aa","aa")"

它将这些值插入数据库

如果我写下:

^{pr2}$

它不起作用

最后如果我把

sql=“插入到Clanovi(CL\u-Ime,CL-Prezime,CL-u-Email,CL-u-Tel)值(%s,%s,%s,%s)”%(输入法,Prezime,Email,Tel)

如果我只在表单字段中输入数字,它将提交到数据库(添加新数据) 输入法=21 prezime=232电子邮件=123电话=123 如果我把其他类似字母的东西放进去,它不会给数据库增加新行 ime=smth prezime=blabla电子邮件=aa电话=dada

(我知道这种方法有安全风险)

下面是完整的代码(我把print(sql)放进去只是为了看看我的查询在最后是什么样子)

#!c:\python32\python.exe
import MySQLdb
import cgi
print ("Content-type: text/html\n\n")

form = cgi.FieldStorage()
ime =form["ime"].value
prezime = form["prezime"].value
email= form["email"].value
tel = form["tel"].value 
print(ime)      
db = MySQLdb.connect("localhost","root","","biblioteka" )

cursor = db.cursor()

sql = "INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES (%s,%s,%s,%s)"%(ime,prezime,email,tel)
print(sql)
try:
   cursor.execute(sql)
   db.commit()
except:
   db.rollback()
db.close()

谢谢你的时间和帮助。在


Tags: form数据库dbsqlvalueclemailaa
1条回答
网友
1楼 · 发布于 2024-05-21 08:50:03

您不应该使用Python的字符串操作来组装查询,因为这样做是不安全的;这会使您的程序容易受到SQL注入攻击。 相反,请使用DB-API的参数替换。将?作为占位符放在任何要使用值的地方,然后提供一个值元组作为游标的execute()方法的第二个参数:

sql = "INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES (?,?,?,?)"
print(sql)
try:
   cursor.execute(sql, (ime, prezime, email, tel))
   db.commit()
except:
   db.rollback()
db.close()

更新:Luke是对的(参见注释):MySQL使用“%s”而不是“?在

更新的sql语句:sql = "INSERT INTO Clanovi(CL_Ime,CL_Prezime, CL_Email, CL_Tel) VALUES (?,?,?,?)"

相关问题 更多 >