3

在发布之前,我已经进行了广泛的搜索。:)

我正在尝试对 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();

是的,我在代码前面声明了 $mysqli 与 mySQL 数据库服务器的连接。$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 行,但这不起作用。有人在这里有什么想法吗?

4

1 回答 1

3

您在 aes 版本中使用b(blob) 进行绑定,但s在非 aes 版本中使用 (string)。尝试s使用 AES 版本 - 只要参数不用于字段或表名,查询中出现参数的位置无关紧要。

于 2012-01-04T17:01:32.417 回答