使用PHP PDO

时间:2015-08-02 17:25:44

标签: 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); 

1 个答案:

答案 0 :(得分:1)

你不能用";"来解雇多个Querys。就像在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);