2013-02-25 62 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