我的数据库中有一个字段,我想存储编码的信息。所以我想使用AES_ENCRYPT(),AES_DECRYPT()函数。
我对正确使用方法有一点问题......
所以这是我的代码,我需要修改,但我尝试了很多方法,总是得到SQL语法错误。
$query="update users set test='".$_POST['info']."' where name='".$_SESSION['user']."'";
mysql_query($query) or die(mysql_error());
我试过这样:
$query="update users set (test='".$_POST['info']."', AES_ENCRYPT('".$_POST['info']."', 'secretkey') ) where name='".$_SESSION['user']."'";
mysql_query($query) or die(mysql_error());
和此:
$query="update users set test='".$_POST['info']."' where name='".$_SESSION['user']."'";
mysql_query(AES_ENCRYPT('$query','secretkey') or die(mysql_error());
答案 0 :(得分:1)
好吧,试试这个:
mysql> create table test(user varchar(100), password varchar(100));
Query OK, 0 rows affected (0.09 sec)
mysql> insert into test(user,password) values('patrick', AES_ENCRYPT('password', 'mykey'));
Query OK, 1 row affected (0.00 sec)
mysql> select * from test where user = 'patrick';
+---------+------------------+
| user | password |
+---------+------------------+
| patrick | stuff |
+---------+------------------+
mysql> update test set password = AES_ENCRYPT('new password', 'mykey') where user = 'patrick';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select AES_DECRYPT(password, 'mykey') from test where user = 'patrick';
+--------------------------------+
| AES_DECRYPT(password, 'mykey') |
+--------------------------------+
| new password |
+--------------------------------+
答案 1 :(得分:1)
第二个代码段不会将AES_ENCRYPT的返回值分配给任何列,因此您的UPDATE语法不正确。请参阅http://dev.mysql.com/doc/refman/5.1/en/update.html。
如果要将加密数据存储在名为“info”的列中,则更新语句at将为... info = AES_ENCRYPT(...
第三个被剪切的代码无效,因为您正在尝试在PHP中评估名为AES_ENCRYPT的函数。很可能PHP环境中没有这样的功能,因此PHP解释器会因错误而中止。
答案 2 :(得分:0)
`$query="update users set (test='".$_POST['info']."', test_encrypted = AES_ENCRYPT('".$_POST['info']."', 'secretkey') ) where name='".$_SESSION['user']."'";
mysql_query($query) or die(mysql_error());`
如果你想完全加密sql查询,请在服务器上使用ssl支持,而不是在php客户端使用。