php - 使用 PHP PDO 插入 mysql 数据库 AES_ENCRYPT

标签 php mysql encryption pdo aes

我试图在使用 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); 

关于php - 使用 PHP PDO 插入 mysql 数据库 AES_ENCRYPT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31774537/

相关文章:

java - 我如何使用 Java 实现暴力攻击 TripleDES?

php - 自定义 CMS 如何使用 PHP/MySQL 数据库为帖子创建类别

php - 在同一台 Apache 服务器上运行 PHP 和 Ruby 有什么问题吗?

mysql - 关于汽车的数据库-for mysql

mysql - gem install mysql2 失败

encryption - 是否可以将 CSA 解密与 FFMPEG 一起使用?

javascript - 如何更改 stripe.js 中的响应(错误/成功)语言

php - MySQL 不返回索引 int

python - 函数需要太多时间来处理来自数据库的循环(3000 次)

java - 从 CipherInputStream 缓冲读取