繁体   English   中英

使用PHP PDO插入mysql数据库AES_ENCRYPT

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM