在带有绑定变量的预准备语句中使用AES_ENCRYPT

时间:2016-07-10 01:38:00

标签: php mysqli aes

想要加密某个特定的数据变量,但不断收到“PHP致命错误:调用未定义的函数AES_ENCRYPT()......”

研究让我暗示它使用的是PHP而不是MySQL?

$key="xyz";

$stmt = mysqli_prepare($mysqli, "INSERT INTO details (FirstName, LastName, EncryptThis) VALUES (?,?,?)");

if ($stmt === false) {
        trigger_error('Statement failed! ' . htmlspecialchars(mysqli_error($mysqli)), E_USER_ERROR);
    }                      

$bind = mysqli_stmt_bind_param($stmt, "sss", $FirstName, $LastName,  AES_ENCRYPT('$EncryptThis','$key'));

        if ($bind === false) {
        trigger_error('Bind param failed!', E_USER_ERROR);
    }                  

$exec = mysqli_stmt_execute($stmt);

在数据库中使用varbinary ...

尝试了

的各种用法
AES_ENCRYPT('$EncryptThis','$key')

EG

AES_ENCRYPT($EncryptThis,$key) 

等等

1 个答案:

答案 0 :(得分:1)

MySQL期望作为绑定参数传递。不是函数名称或其他SQL表达式。只需

如果要调用MySQL AES_ENCRYPT函数,则需要将其作为SQL文本(作为SQL语句准备的字符串)的一部分出现。函数的名称不能作为绑定参数的一部分传递。

像这样:

 "INSERT ... VALUES ( ? , ? , AES_ENCRYPT( ? , ? ) )" 

 mysqli_stmt_bind_param($stmt, "ssss", $FirstName, $LastName, $EncryptThis, $key);