【发布时间】:2017-11-10 09:43:41
【问题描述】:
我正在通过 Flask 框架构建一个 Web 应用程序,并尝试使用 html 表单来检索最终将存储在 mysqldb 数据库中的用户数据。
我最初是用“%”而不是“,”将我的 python 变量传递给 sql 命令,如下所示:
cursor.execute('INSERT INTO %s (column1,column2,column3,column4,column5) VALUES ("%s","%s","%s","%s","%s")' % (value1,value2,value3,value4,value5,value6)
这种方法完美无缺,但后来我在调试我的应用程序时明智并意识到这极易受到 sql 注入的影响,我需要使用“,”来代替。所以我把代码改成这样:
cursor.execute("INSERT INTO %s (column1,column2,column3,column4,column5) VALUES (%s,%s,%s,%s,%s)", (value1,value2,value3,value4,value5,value6)
根据我在这里阅读的所有内容,google,youtube 等,这将是解决我的问题的所有方法,我确信它是,但是出现了一个新的 sql 语法问题,我无论我尝试做什么,似乎都无法修复。
与这一切相关的我的 html 表单如下所示:
<form method="post" enctype="multipart/form-data">
<ul>
<li><input type="text" name="title" placeholder="Title" required></li>
<li><input type="text" name="location" placeholder="Location" required></li>
<li><select name="activity" required>
<option value="Active">Active</option>
<option value="Food/Drink">Food/Drink</option>
<option value="Liesure">Liesure</option>
<option value="Night Life">Night Life</option>
<option value="Scenic">Scenic</option>
<option value="Other">Other</option>
</select></li>
<li><textarea id="post" name="content" placeholder="Write post here..." required></textarea></li>
<li><input type="file" name="image" accept="image/*"></li>
我在我的 python 代码中使用 request.form["html_name"] 将用户输入分配给所有用户输入的变量,除了图像之一,我使用 request.files['image'] 代替。不过,我实际上并没有将图像插入数据库,只是将存储图像的路径插入到数据库中,以防万一……
说完这一切之后,我尝试输入“test”作为标题,“Pittsburgh”作为位置,“Active”作为活动,“test”作为内容,默认为“图像/”。返回的错误如下:
"You have an error in your SQL syntax; check the manual that corresponds
to your MySQL server version for the right syntax to use near
''TheTableName' (title,location,activity,content,photo) VALUES
('test','Pittsburgh','A' at line 1")
如您所见,内容和照片似乎完全被忽略了,活动仅显示为“A”。请记住,当我使用“%”而不是“,”时,这一切都很好。我不知道使用其中一种之间到底有什么变化,但显然这是因为现在它不起作用了。我想知道这是否与整个表单中的 html 输入类型不同这一事实有关,但这可能只是巧合。我不知道。非常感谢所有帮助,谢谢。
【问题讨论】:
标签: html flask mysql-python