10

私は最近、Web目的でPythonとMySQLを学び始めましたが、次の問題が発生しました。

mysqlデータベースから、paramセクションに入力したテキストを含む1つのレコードを引き出したいのですが、クエリを実行するときに次の問題が発生しています。

traceback (most recent call last):
  File "/Users/Strielok/Desktop/test.py", line 13, in <module>
    c.execute("SELECT * FROM data WHERE params LIKE ('%s%') LIMIT 1"  % (param))
TypeError: not enough arguments for format string

これが私のコードです:

import MySQLdb



db = MySQLdb.connect (host = "localhost",
                          user = "root",
                          passwd = "root",
                          db = "test")
param = "Test"

par = param

c = db.cursor()

c.execute("SELECT * FROM data WHERE params LIKE ('%s%') LIMIT 1"  % (param))


data = c.fetchall()
print data

c.close()

前もって感謝します。

4

3 に答える 3

46

データを SQL 文字列に直接挿入することは、 SQL インジェクションが発生しやすいため、最適な方法ではありません。これを次のように変更する必要があります。

c.execute("SELECT * FROM data WHERE params LIKE %s LIMIT 1", ("%" + param + "%",))

于 2012-06-05T19:24:02.597 に答える
0

適切なパラメーターを使用していません。('%s%___')Python は、文字列置換を行うために、この領域に別の修飾子があることを期待しています。これも脆弱なコードです。これを行う適切な方法は、次のようになります。

c.execute("SELECT * FROM data WHERE params LIKE '%%s%' LIMIT 1",(param,))

于 2012-06-05T19:22:58.627 に答える