我在发帖之前已广泛搜索过。 :)
我正在尝试对mySQL进行简单的插入。我正在使用mysqli使用预处理语句。以下是代码:
$sql_query = "UPDATE $table SET $name = AES_ENCRYPT(?,'$key') WHERE $id_name = '$_SESSION[$id_name]'";
$stmt = $mysqli->prepare($sql_query);
$stmt->bind_param('b', $value);
$stmt->execute();
是的,我在代码前面通过与mySQL数据库服务器的连接声明了$ mysqli。 $ key也在脚本的前面声明。下面是调用此代码时mySQL通用日志文件的输出:
120104 10:46:18 359 Connect root@localhost on payday-loan-leads
359 Query SELECT table_location, id_name, encrypt FROM insert_information WHERE required_field_name = 'first_name'
359 Prepare UPDATE personal_info SET first_name = AES_ENCRYPT(?,'^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32') WHERE personal_id = '5282'
359 Execute UPDATE personal_info SET first_name = AES_ENCRYPT('','^&IK8uBo92X04jhAHPUH(Y(8p3)&^ndlkj32') WHERE personal_id = '5282'
359 Close stmt
359 Quit
正如您所看到的,mySQL正在准备INSERT查询但不捕获$ value的值。当我从$ sql_query中删除AES_ENCRYPT时,它就像一个魅力:
$stmt = $mysqli->prepare("UPDATE $table SET $name = ? WHERE $id_name = '$_SESSION[$id_name]'");
$stmt->bind_param('s', $value);
问题在于mySQL的AES_ENCRYPT函数。我尝试将函数移动到bind_param行,这不起作用。任何人有任何想法吗?
答案 0 :(得分:3)
您在aes版本中使用b
(blob)进行绑定,而在非aes版本中使用s
(字符串)。在AES版本中尝试s
- 在查询中出现参数时无关紧要,只要它不用于字段或表名。