AES_DECRYPT() 返回空字段

Posted

技术标签:

【中文标题】AES_DECRYPT() 返回空字段【英文标题】:AES_DECRYPT() returns null fields codeigniter 【发布时间】:2017-02-06 22:55:47 【问题描述】:

我在 mysql 上有一个加密表,当我在命令窗口上运行以下查询时,我得到了预期的结果:

select AES_DECRYPT(field,'key') as field from table

当我从 codeigniter 运行相同的查询时:

$this->db->query("SELECT AES_DECRYPT(field,'".$key."') AS field from table")

我得到带有稀有字符和空行的行

array(171) 
  [0]=>
  array(1) 
    ["nombre"]=>
    NULL
  
  [1]=>
  array(1) 
    ["nombre"]=>
    NULL
  
  [2]=>
  array(1) 
    ["nombre"]=>
    string(17) "�O������aǥbnp/"

我正在使用 xampp php.ini 上的默认字符集设置为 utf8 数据库的字符集设置为utf8

我之前也遇到过类似的问题,但是查询返回的是十六进制值,所以我使用 utf8_encode() 来显示内容并且一切正常。我更新了 xampp,现在正在发生这种情况。

【问题讨论】:

【参考方案1】:

假设$key 是一个字符串,那么这可能会起作用

$this->db->query("SELECT AES_DECRYPT(field, $key) AS field from table");

当您在命令窗口中运行select AES_DECRYPT(field,'key') as field from table; 时,您正在为AES_DECRYPT 的第二个参数提供一个字符串文字。使用作为字符串的 var 时并非如此。

【讨论】:

以上是关于AES_DECRYPT() 返回空字段的主要内容,如果未能解决你的问题,请参考以下文章

提交空搜索字段时如何停止搜索字段返回所有结果?

GraphQL 简单嵌套查询返回空字段

在引导模式中时,asp.net 表单字段返回空

GoogleSignIn.getLastSignedInAccount() 返回具有空字段的帐户

NamedQuery 返回具有空字段的实体

使用 fastjson 解决字段串对象空值返回空数组问题