无法使用 python 和 mysql 过滤搜索

Not Working filter search using python and mysql

写入 1 后显示没有记录。我的数据库中有 1 的数据。有人可以帮我知道我哪里错了吗?

    def searchDB():
        try:
           sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase") 
           cur =sqlCon.cursor ()
           cur.execute ("select categoryname from category where "+ str(searchby.get())+ "Like '%" + str(search.get()) + "Like '%'")
           result = cur.fetchall ()
           if len(result) !=0:
              self.category_records.delete(*self.category_records.get_children())
              for row in result:
                  self.category_records.insert('',END,values =row)
           sqlCon.commit()
           sqlCon.close()
          
     
        except:
           tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
           Reset()

        sqlCon.close()


      

您在查询中的 str(search.get()) 之后有一个额外的 Like。因此,如果用户键入 foo,它将搜索不存在的 fooLike

您还缺少第一个 LIKE 之前的 space。

您不应该将搜索字符串直接连接到查询中,这对 SQL 注入是开放的。您应该在查询中使用参数。

cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)

无需围绕这些 .get() 调用调用 str(),因为您是从文本变量中获取的。

对于测试长度的 if,您应该显示有关在 else: 中找不到匹配结果的消息。 except: 仅在出现错误时运行。

    def searchDB():
        try:
           sqlCon = mysql.connect(host="localhost",user="root",password="*********",database="mydatabase") 
           cur =sqlCon.cursor ()
           cur.execute ("select categoryname from category where "+ searchby.get() + " Like %s", ('%' + search.get() + '%',)
           result = cur.fetchall ()
           if len(result) !=0:
              self.category_records.delete(*self.category_records.get_children())
              for row in result:
                  self.category_records.insert('',END,values =row)
           else:
               tkinter.messagebox.showinfo("Data Search Form", "No such record Found")
               Reset()
           sqlCon.commit()          
     
        except Exception as e:
           tkinter.messagebox.showinfo("Data Search Form", "Error during search " + str(e))
           Reset()

        sqlCon.close()