2012-04-14 48 views
-1

我試圖登錄到我的表名爲Python中使用MySQLdb的acounts,但它並沒有爲我工作。我一直收到我的消息「Not Logged In」。這是我的代碼:MySQLdb的從「選擇」登錄

database = MySQLdb.connect("127.0.0.1", "root", "pswd", "Kazzah") 
cursor = database.cursor() 
cursor.execute("SELECT * FROM Accounts WHERE Email='%s' AND Password='%s'" % (_Email, _Password)) 
database.commit() 
numrows = cursor.rowcount 

if numrows == 1: 
    msg = "Logged In" 
else: 
    msg = "Not Logged In" 

cursor.close() 
database.close() 

我在做什麼錯了?我對此很陌生,所以我希望我做得有點好。謝謝。

+0

你爲什麼這樣做'database.commit()'?你沒有寫任何東西給DB。如果您刪除它,它會正常工作嗎?讓我知道如果它確實如此,我會將其添加爲答案。 – 2012-04-14 22:37:17

+0

您是否嘗試過自己在MySQL接口中運行此查詢?它完全返回什麼? – 2012-04-14 22:37:37

+0

Josvic,我把它移開了,它什麼也沒做。鏈接器,是的,它在phpMyAdmin中正常工作。 – Alec 2012-04-14 22:40:17

回答

0

出於某種原因(我想是因爲使用終端的),當我輸入的信息,我將不得不敲回車。我相信,當我會命中輸入時,'\ n'被插入並且導致numrows返回0.

我放置了

.replace('\n', '') 

_EMAIL和_password之後,現在,它的偉大工程!現在我還有其他一些問題,但沒什麼大不了的。感謝大家的幫助!

0

嘗試從各地%S

cursor.execute("SELECT * FROM Accounts WHERE Email=%s AND Password=%s" % (_Email, _Password)) 
+0

與Python格式化字符串,這可能變成一個嚴重的安全問題,更好地使用數據庫庫的參數功能(請參閱我的回答) – 2012-04-14 22:47:05

+0

@pjama我需要添加單引號的原因,提示錯誤。 – Alec 2012-04-14 22:53:14

0
cursor.execute("SELECT * FROM Accounts WHERE Email=%s AND Password=%s", (_Email, _Password)) 

取出引號試試這個。如果您使用MySQLdb的參數支持而不是python的格式字符串,庫會爲您進行轉義(這對於安全原因來說也是非常重要的一點)。

請注意,mysqldb數據庫驅動程序僅支持%s,因此您必須無論用它的數據類型的要發送到數據庫。

+0

這沒有奏效。 – Alec 2012-04-14 22:52:54

+0

爲什麼不是numrows返回1? – Alec 2012-04-14 23:05:45

+0

它返回什麼? 0,沒有其他的東西? – 2012-04-15 10:54:54