2013-02-25 105 views
0

嘗試使用php插入新行到mysql數據庫。加密輸入時Mysql語法錯誤

密碼是一滴我在bind_param

$stmt = $this->db->prepare("INSERT INTO USERS (email,password,key) VALUES (?,AES_ENCRYPT(?, ?),?)"); 
      if (!$stmt) { 
      echo "prepare failed\n"; 
      echo "error: ", $this->db->error, "\n"; 
      return; 
      } 

      $rc = $stmt->bind_param("ssss", $email, $password, $key, $key); 
      if (!$rc) { 
       echo "bind_param failed\n"; 
       echo "error: ", $stmt->error, "\n"; 
       return; 
     } 

錯誤嘗試密碼都sb:您的SQL語法錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的「key」VALUES(?,AES_ENCRYPT(?,?),?)'處使用正確的語法'

我該如何解決此問題?

+0

是否有加密和散列密碼的原因?散列作爲一種方式更安全,並且您永遠不需要解密密碼。 – datasage 2013-02-25 18:51:40

+0

如果多個用戶選擇相同的密碼哈希將是相同的不是嗎?以及我認爲關鍵將是每個用戶獨特的,所以它將足夠安全的每個人 – 2013-02-25 18:58:59

+0

這並不重要。散列密碼的目的是這樣的,如果你的數據庫被破壞,你將無法恢復密碼。用加密密鑰與用戶信息一起存儲即可。如果您嘗試強制使用唯一密碼,則會向用戶顯示某人正在使用該密碼。它是一個蠻力的問題來弄清楚誰。 – datasage 2013-02-25 19:00:18

回答

5

key是mysql中的保留字。你必須引用它:

INSERT INTO users (email, password, `key`) ... 
            ^---^-- 
的後勤前

,什麼是如果你存儲的密鑰保存在那裏旁邊加密密碼的呢?它就像銀行建築一個有50'厚的鋼牆的儲藏室,然後用一點口香糖來「鎖定」門。

+0

更像是將組合放在鎖旁的Post-It上。 – Barmar 2013-02-25 18:54:27

+0

我不會在數據庫中存儲密鑰我只是想看看,如果加密工作與否。 – 2013-02-25 18:54:55