2013-03-11 7 views
1

Я создал окно входа в систему, и была таблица «peerlist», которая содержит имя, имя пользователя, пароль. Я хочу проверить имя пользователя и пароль из таблицы.(«SELECT password FROM peerlist WHERE username =?», Username1)

имя_пользователя1 содержит имя пользователя, которое я получаю из окна входа в систему. Я попытался восстановить пароль, используя username1.

cursor.execute("SELECT password FROM peerlist WHERE username=?",username1) 

Но произошла ошибка

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current 
          statement uses 1, and there are 3 supplied. 
+0

'cursor.execute (" SELECT password FROM peerlist WHERE username =? ", [Username1])' должен это делать. – dmg

ответ

6

Используйте кортеж для параметров:

cursor.execute("SELECT password FROM peerlist WHERE username=?", (username1,)) 

параметры должны быть кортеж или список (последовательность); но строка также является последовательностью (она имеет длину, и вы можете адресовать отдельные символы), поэтому вы дали .execute() вызов последовательности из len(username1) символов вместо одного параметра. Очевидно, что имя пользователя равно 3 символам, поэтому сообщение об ошибке.

-3

Это плохая идея, приведет к SQL-инъекции. Подробности см http://docs.python.org/2/library/sqlite3.html

cursor.execute("SELECT password FROM peerlist WHERE username=%s"%(username1)) 
+1

Нет, нет, нет, нет, нет. Не заменяйте струны самостоятельно. 'sqlite3' может сделать это для вас безопасным способом SQL-инъекции. – dmg

+2

Вы только что открыли атаку SQL-инъекций. Могу ли я получить взломать ваши веб-приложения? –

+0

Я пробовал, здесь username1 содержит значение alan , но есть ошибка. sqlite3.OperationalError: нет такой колонки: alan – mridul

Смежные вопросы