2012-12-04 25 views
-1

我想在MySQL中使用AES_DECRYPT來解密成功加密的SSN。在輸出中,我得到單詞「數組」,而不是來自該字段的實際數據。我的PHP和MySQL知識有點生疏,所以我確信這是我忽略的一些愚蠢的東西。任何幫助,將不勝感激。AES_DECRYPT返回「Array」而不是解密數據

OUTPUT:
verify_name other_names SSN DOB
:測試:測試:數組:測試

CODE:
$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"];

回答

0

這是因爲你獲取的結果作爲數組。

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

它呼應Array因爲你永遠不重新分配$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"]; 
} 

理想的情況是,你應該使用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()); } 
+0

因此,而不是mysql_fetch_array()我應該使用什麼?原諒我的無知 - 我從來只有一個結果才能抓住。 – kaitlynjanine

+0

@kaitlynjanine:'mysql_fetch_array()'不一定是錯誤的*方法,你只需要以正確使用結果的方式進行編碼。將'echo $ ssndecrypt [0];'行更改爲'$ ssndecrypt = $ ssndecrypt [0]';'可能會起作用,但它的可讀性較差並且更危險一點。 –

+0

'爲($ I = 0; $ I <$ num_result; $ I ++)\t \t \t \t { \t \t \t \t $行= mysql_fetch_array($ QueryResult中); \t \t \t \t \t \t \t \t \t \t \t \t \t \t \t $ SQLstring2 = 「SELECT AES_DECRYPT(SSN, '$鍵')AS解密來自應用程序,其中name ='」。 $ row ['name']。 「'」; \t \t \t \t \t $ QueryResult2 = @mysql_query($ SQLstring2,$ conn)or die(「...「); \t \t \t \t \t而($行= mysql_fetch_assoc($ QueryResult2)) \t \t \t \t \t { \t \t \t \t \t \t $ ssndecrypt = $行[ '解密']; \t \t \t \t \t}回聲「在此回顯的所有其他字段 - 其中有200個」; \t \t \t \t echo $ ssndecrypt;}'但新代碼擦除了我所有的輸出。我錯了嗎? – kaitlynjanine

相關問題