[英]Inserting into mysql database AES_ENCRYPT using PHP PDO
我尝试使用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);
您不能触发多个以“;”分隔的查询 就像在PhpMyAdmin中一样。 这是一种方法,您可能更喜欢:
<?php
$aeskey = '4ldetn43t4aed0ho10smhd1l';
$sql = "INSERT INTO ". TABLE_NAME. " (record_created, name, dob, someinfo)
VALUES (
NOW(),
:name',
AES_ENCRYPT(:dob, '".$aeskey."'),
AES_ENCRYPT(:someinfo, '".$aeskey."'));";
$db = Employee::getConnection();
$stmt = $db->prepare($sql);
$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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.