我正在尝试使用AES_ENCRYPT和CBC加密模式将数据值插入MYSQL时进行加密:
SET @@session.block_encryption_mode = 'aes-256-cbc';
如果我直接在SQL中插入数据,那么它会成功插入而没有任何问题。
但是,如果我使用准备好的语句(PDO)通过PHP插入数据,则数据不会插入到数据库中,我也没有收到错误信息,并且返回的最后一次插入ID为
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_mulderlastInsertId()
返回0,数据没有被插入。 - input$stmt->errorInfo
。 - u_mulderUndefined property: PDOStatement::$errorInfo
。 - input