2013-08-19 131 views
1

我传递变量像蟒蛇SQL变量WHERE

query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra="+text+" ORDER BY Exemple ASC;") 

即时得到任何东西通过我的可变文本这样的问题。 ,如果我做印刷query7.next()即时得到假..

我的程序与PyQt的,我有一个组合框,当我选择它的一些文字,我通过这段文字我的变量“文本”,我想用它在我的凡Palavra =文字,但我不知道该怎么做。林这样做,因为它我会得到这些文本和即时把它在一个QTableWidget的例子..

当我做一个词的搜索,像

query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra='ronaldo' ORDER BY Exemple ASC;") 

..其确定..我让我举例... 但是,如果我改变“罗纳尔多”我的可变文本,我得到什么表..

的方式即时创建表把的例子是:

index1 = 0 

while (query7.next()): 
     self.tableWidget.setItem(index1,0,QTableWidgetItem(query7.value(0).toString())) 
     index1 = index1+1 

回答

1

将引号中的text换行,或将引号放入查询字符串中。例如:

text = "'%s'" % text 

query7 = QSqlQuery ("SELECT Exemplo FROM TabelaSubst WHERE Palavra='"+text+"' ORDER BY Exemple ASC;") 
+1

这些方法都让您的应用程序打开SQL注入。 – Blender

+0

的确如此,我只注意到'text'来自组合框。在传递给查询之前应该清理它。 –

+0

我仍然得到错误,当我做印刷query7.next() 与 query7 = QSqlQuery( “SELECT Exemplo FROM TabelaSubst WHERE Palavra = ' ”+文字+“' ORDER BY为例ASC;”) 但是,如果我改变“ +文本+“为罗纳尔多和打印query7.next()它返回true – Marco