-1

MySQLでAES_DECRYPTを使用して、正常に暗号化されたSSNを復号化しようとしています。出力では、そのフィールドからの実際のデータの代わりに「配列」という単語を取得します。私のPHPとMySQLの知識は少し錆びているので、私が見落としていたのはばかげたことだと確信しています。どんな助けでもいただければ幸いです。

出力:
verify_name other_names ssn dob
:test:test:Array:test

コード:
$key="88b871WZ3SntWK67rN3l2J1SvMqsOjyk";
$SQLstring = "SELECT * FROM applications";
$QueryResult = @mysql_query($SQLstring, $conn) or die("Query Problem - "
. mysql_error($conn) . " - Error Number - "
. mysql_errno($conn));
echo "verify_name other_names ssn dob";

$num_result = mysql_num_rows($QueryResult);
for ($i = 0; $i < $num_result; $i++)

{
$row = mysql_fetch_array($QueryResult);
$SQLstring2 = "SELECT AES_DECRYPT(ssn,'$key') FROM applications WHERE name='" . $row["name"] . "'";
$QueryResult2 = @mysql_query($SQLstring2, $conn) or die("Query Problem - "
. mysql_error($conn) . " - Error Number - " . mysql_errno($conn));
$num_result2 = mysql_num_rows($QueryResult2);
for ($j = 0; $j < $num_result; $j++){
$ssndecrypt = mysql_fetch_array($QueryResult2);

echo $ssndecrypt[0];
} echo $row["verify_name"];
echo $row["other_names"];
echo $ssndecrypt;
echo $row["dob"];

4

1 に答える 1

0

これは、結果を配列としてフェッチしているためです。

$ssndecrypt = mysql_fetch_array($QueryResult2);
...
echo $ssndecrypt;

変数Arrayを再割り当てすることはないため、エコーしています。$ssndecrypt

ただし、問題の核心は、クエリを不必要に複雑にしていることのようです。次のような場合に、テーブルを2回クエリする理由はありません。

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"];
}

ただし、理想的には、関数の代わりにPDOを使用する必要があります。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()); }
于 2012-12-04T19:40:57.903 に答える