擅长:python、mysql、java
<p>最好的解决方案是使用准备好的语句:</p>
<pre><code>cuDatabase.execute("SELECT Result FROM resultstable WHERE QuizID=? AND UserID=?", Quizno, UserID)
</code></pre>
<p>在prepared语句模式下,所有变量都被查询文本中的问号替换,并且是<code>execute()</code>的参数。但并不是所有的数据库或数据库驱动程序都支持它。有时,您将不得不使用<code>%s</code>(PostgreSQL驱动程序之一就是这样工作的)。</p>
<p>更糟糕的是,工作解决方案是使用Python<code>%</code>运算符,但使用此解决方案,您将不得不使用自己的<code>quote()</code>函数,该函数可以避开数据中可能出现的危险字符(防止SQL注入):</p>
<pre><code>cuDatabase.execute("SELECT Result FROM resultstable WHERE QuizID='%s' AND UserID='%s'" % (quote(Quizno), quote(UserID)))
</code></pre>