【发布时间】:2013-11-13 11:18:40
【问题描述】:
我处于两难境地,我该如何编写这样的 sql 查询来进行搜索。我已经尝试并发布了它,但是当用户在表单的多个字段中输入数据并进行搜索时,它并不像预期的那样。
我为单个表单字段编写表单并进行搜索和显示的查询
#!/usr/bin/python
import cgi
import MySQLdb
class Table():
def __init__(self, host, user, passwd, name):
self.db = MySQLdb.connect(host = host, user = user, passwd = passwd, db = name)
self.cursor = self.db.cursor()
def getdata(self, fname, lname, age, gender):
self.fname = fname
self.lname = lname
self.age = age
self.gender = gender
def mysqlconnect(self):
sql = "select * from PERSON where F_Name = '%s' or L_Name = '%s' or Age = '%s' or Gender = '%s' " %(self.fname, self.lname, self.age, self.gender)
self.cursor.execute(sql)
result = self.cursor.fetchall()
for row in result:
print "<br>", row[0], row[1], row[2], row[3]
self.cursor.close()
self.db.close()
def main():
print "Content-type: text/html\n"
tableobj = Table("localhost", "root", "root", "Info")
form = cgi.FieldStorage()
f_name = form.getvalue('firstname', '')
l_name = form.getvalue('lastname', '')
age = form.getvalue('age', 0)
gender = form.getvalue('gender', '')
tableobj.getdata(f_name, l_name, age, gender)
tableobj.mysqlconnect()
if __name__ == "__main__":
main()
如果假设用户在 FirstName 字段和 Gender 字段中输入数据
Firstname: Jeremy
Gender: male
那么它应该显示记录。 如果假设用户在年龄字段和性别字段中输入数据
Age : 25
Gender: Female
它应该显示年龄为 25 岁的少数男性的结果。 同样所有可能的条件
【问题讨论】:
-
哇!我希望你没有把它放在网上,因为你在那里打开了自己的 SQL 注入攻击。 首先了解如何使用 SQL 参数!
-
使用
sql = "select * from PERSON where F_Name = %s or L_Name = %s or Age = %s or Gender = %s",然后使用self.cursor.execute(sql, (self.fname, self.lname, self.age, self.gender))(%s占位符周围没有引号,将参数移动到cursor.execute()调用的第二个参数。 -
我只是在本地服务器上练习......代码有什么问题?
-
除此之外,你没有给我们任何东西。你有什么数据?您使用了哪些搜索条件?你期望得到什么输出,你得到了什么?
-
所以练习正确,防止你养成非常非常非常坏的习惯。
标签: python mysql cgi mysql-python