Php AES“解密返回”;数组";而不是解密数据

Php AES“解密返回”;数组";而不是解密数据,php,mysqli,aes,encryption,Php,Mysqli,Aes,Encryption,我正在尝试使用MySQL中的AES_DECRYPT来解密成功加密的SSN。在输出中,我得到的是单词“Array”,而不是该字段的实际数据。我的PHP和MySQL知识有点生疏,所以我肯定我忽略了一些愚蠢的东西。任何帮助都将不胜感激 输出: 验证其他名称ssn dob :测试:测试:阵列:测试 代码: $key=“88b871WZ3SntWK67rN3l2J1SvMqsOjyk” $SQLstring=“从应用程序中选择*” $QueryResult=@mysql\u query($SQLstri

我正在尝试使用MySQL中的AES_DECRYPT来解密成功加密的SSN。在输出中,我得到的是单词“Array”,而不是该字段的实际数据。我的PHP和MySQL知识有点生疏,所以我肯定我忽略了一些愚蠢的东西。任何帮助都将不胜感激

输出:
验证其他名称ssn dob
:测试:测试:阵列:测试

代码:

$key=“88b871WZ3SntWK67rN3l2J1SvMqsOjyk”
$SQLstring=“从应用程序中选择*”
$QueryResult=@mysql\u query($SQLstring,$conn)或die(“查询问题-”
.mysql_错误($conn)。“-错误号-”
.mysql_errno($conn))
echo“验证其他名称ssn dob”

$num\u result=mysql\u num\u行($QueryResult)
对于($i=0;$i<$num_result;$i++)

{
$row=mysql_fetch_数组($QueryResult);
$SQLstring2=“从应用程序中选择AES_DECRYPT(ssn,$key'),其中name=”$row[“name”]。”;
$QueryResult2=@mysql\u query($SQLstring2,$conn)或die(“查询问题-”
.mysql_错误($conn)。“-错误号- .mysql_errno($conn));
$num_result2=mysql_num_行($QueryResult2);
对于($j=0;$j<$num_result;$j++){
$ssndecrypt=mysql\u fetch\u数组($QueryResult2);

echo$ssndecrypt[0];
} echo$row[“验证_名称”];
echo$row[“其他名称”];
echo$ssndecrypt;
echo$row[“dob”];

这是因为您正在以数组的形式获取结果

$ssndecrypt = mysql_fetch_array($QueryResult2);
...
echo $ssndecrypt;
它回显
数组
,因为您从未重新分配
$ssndecrypt
变量

然而,问题的核心似乎是您不必要地使查询复杂化。如果您可以执行以下操作,则没有理由查询表两次:

SELECT verify_name,
       other_names,
       dob,
       AES_DECRYPT(ssn,'$key') AS ssn
  FROM applications
这大大简化了代码:

$stmt = "SELECT verify_name, other_names, dob, AES_DECRYPT(ssn,'$key') AS ssn FROM applications";
$result = @mysql_query($stmt, $conn) or die("Query Problem - " . mysql_error($conn) . " - Error Number - " . mysql_errno($conn));
echo "verify_name other_names ssn dob";
while ($row = mysql_fetch_assoc($result))
{
    echo $row["verify_name"];
    echo $row["other_names"];
    echo $row["ssn"];
    echo $row["dob"];
}

理想情况下,您应该使用以下函数,而不是
mysql.*
函数:

try {
    $dbh = new PDO('mysql:host=localhost;dbname=mydb', $user, $pass);
    foreach($dbh->query("SELECT verify_name, other_names, dob, AES_DECRYPT(ssn,'$key') AS ssn FROM applications") as $row) {
        echo $row["verify_name"];
        echo $row["other_names"];
        echo $row["ssn"];
        echo $row["dob"];
    }
    $dbh = null;
} catch (PDOException $e) { die("ERROR: " . $e->getMessage()); }

因此,我应该使用什么来代替mysql\u fetch\u array()?请原谅我的无知-我以前从来没有只获取过一个结果。@kaitlynjanine:
mysql\u fetch\u array()
不一定是错误的方法,你只需要以正确使用结果的方式编码。更改
echo$ssndecrypt[0]
line to
$ssndecrypt=$ssndecrypt[0]”;
可能也会起作用,但它的可读性较差,更“危险”。
for($i=0;$i<$num\u result;$i++){$row=mysql\u fetch\u数组($QueryResult);$SQLstring2=“SELECT AES\u DECRYPT(ssn,$key'),从name='“$row”的应用程序解密['name']。“;$QueryResult2=@mysql\u query($SQLstring2,$conn)或die(“…”);而($row=mysql\u fetch\u assoc($QueryResult2)){$ssndecrypt=$row['decrypted'];}echo“所有其他字段都在这里回显——有200个”;echo$ssndecrycrypt;}
但是新代码抹去了我所有的输出。我弄错了吗?我还尝试了从email='.$row[“email”]。“;$QueryResult2=@mysql\u query($SQLstring2,$conn)或die(“查询问题-”.mysql\u error($conn))的应用程序中选择AES\u DECRYPT(ssn,$key)作为“DECRYPT”。-错误号-.mysql_errno($conn));$num_result2=mysql_num_rows($QueryResult2);$result=mysql_查询($SQLstring2,$conn)或die(“查询问题”);$ssndecrypt=mysql_结果($result,0);echo$ssndecrypt;并且SSN的输出是空的,而不是数组。@kaitlynjanine:重新阅读原始问题后,我认为您采取了错误的方法。请参阅编辑后的答案。