2017-04-25 4 views
0

私はPythonとMySQLの初心者ですので、私は読み取り専用アカウントで練習しています。私は、基本的に姓、姓を質問し、クエリに挿入して結果を返す実行可能なスクリプトを作成しようとしています。以下は、私が持っていると私は取得エラーです:私はそれがだように感じる」または「どこか欠落しているが、私は私の構文間違いを把握することはできませんpymysql-pymysql.err.InternalError:1054、カラム名として使用されるユーザ入力文字列

cur = conn.cursor() 

user_input_fname = raw_input("Enter Trainer First Name: ") 
user_input_lname = raw_input("Enter Trainer Last Name: ") 

cur.execute(" SELECT concat(u.firstname, ' ', u.lastname) AS clientName, us.sessionid AS sessionID, convert_tz(s.starttime, '+00:00', '+04:00') AS sessionTimeEST, concat(t.firstname, ' ', t.lastname) AS trainerName FROM usersessions us LEFT JOIN users u ON us.userid = u.id INNER JOIN sessions s ON us.sessionid = s.id INNER JOIN trainers t ON s.trainerid = t.id WHERE u.firstname = %s AND u.lastname =%s ORDER BY s.starttime;' " %(user_input_fname, user_input_lname)) 

data = cur.fetchall() 

cur.close() 
conn.close() 

ERROR: pymysql.err.InternalError: (1054, u"Unknown column 'ethan' in 'where clause'")

答えて

0

文字列リテラルは内。 。SQLでは、where句で名前を提供している'または"で囲む必要がありますので、これらはspeechmarksのいずれかで囲む必要があります。

...WHERE u.firstname = '%s' AND u.lastname ='%s'... 

SQLステートメントの終わりの直前に小さな一重引用符もあります。それが本当にあなたのコードであれば、それは削除する必要があります。

+0

ありがとう、私はそれを逃したし、それらを封入していませんでした。私は文字列を囲むようにしようとしましたが、まだエラーがありました。私も印刷物を持っていなかったし、fetchallが印刷すると仮定した。 – eknack87

0

文字列補間(つまり、%演算子)を使用してこれらの値をクエリに配置することはお勧めできません。データがどこに由来するかによってSQLインジェクション攻撃が発生する可能性があります。

これらの引数をexecuteメソッドに渡すと、安全です(引用符の問題も解決されます)。

I.e.

cur.execute(""" 
SELECT concat(u.firstname, ' ', u.lastname) AS clientName, us.sessionid AS sessionID, convert_tz(s.starttime, '+00:00', '+04:00') AS sessionTimeEST, concat(t.firstname, ' ', t.lastname) AS trainerName 
FROM usersessions us LEFT JOIN users u ON us.userid = u.id 
INNER JOIN sessions s ON us.sessionid = s.id 
INNER JOIN trainers t ON s.trainerid = t.id 
WHERE u.firstname = %s AND u.lastname =%s 
ORDER BY s.starttime; 
""", (user_input_fname, user_input_lname)) 

このようにすると、MySQLライブラリはあなたの入力を安全に見積もることができます。

+1

非常に感謝しています。テストされ、これも同様に働いた:) – eknack87

関連する問題