【发布时间】:2015-10-24 19:22:27
【问题描述】:
我正在尝试使用 AES_ENCRYPT 和 CBC 加密模式插入 MYSQL 时加密数据值:
SET @@session.block_encryption_mode = 'aes-256-cbc';
如果我直接在 SQL 中插入数据,它会成功插入,没有任何问题。
但是,如果我使用准备好的语句 (PDO) 通过 PHP 插入,则数据不会插入到数据库中,并且我不会收到任何错误,并且返回的 lastInsertID 是 0。
如果我删除AES_ENCRYPT 部分,它会成功插入数据。
完整代码:
$sql .= "SET @IV = RANDOM_BYTES(16);";
$sql .= "INSERT INTO ". TABLE_NAME. " (record_created, name, dob, someinfo, iv)
VALUES (
NOW(),
:name,
AES_ENCRYPT(:dob, :key, @IV),
AES_ENCRYPT(:someinfo, :key, @IV),
@IV); ";
try {
$db = Employee::getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam(':key', $key);
$stmt->bindParam(':name', $employee->name);
$stmt->bindParam(':dob', $employee->dob);
$stmt->bindParam(':someinfo', $employee->someinfo);
$stmt->execute();
$employee->id = $db->lastInsertId();
$db = null;
echo json_encode($employee);
【问题讨论】:
-
:name',?是错字吗? -
@u_mulder,不,不是。它有什么问题?
-
为什么
name后面有一个'? -
@u_mulder,我的错。我不知道我是怎么错过的。我删除了它,但同样的问题。
lastInsertId()正在返回 0 并且没有插入数据。 -
所以检查错误。 AFAIK
$stmt->errorInfo
标签: php mysql encryption pdo aes