惠。我已成功加密数据库中的敏感数据。现在我想解密数据并将其显示在网络上。我试过这段代码,但是我收到了一个错误。你能帮助我吗?
<?php
// Connects to the XE service (i.e. database) on the "localhost" machine
$conn = oci_connect('DEVELOPER', 'xs2developer', 'localhost/XE');
if (!$conn) {
$e = oci_error();
trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$id = $_GET['id'];
$query1 = "SELECT *,enc_dec.decrypt(DATA_FYP) AS DECRYPT_DATA FROM FYP WHERE ID_USER='".$id."'";
$stid = oci_parse($conn, $query1);
oci_execute($stid);
echo "<form name='form1' method='post' action=' '>";
echo "<table align='center'>";
while ($row = oci_fetch_array($stid, OCI_ASSOC+OCI_RETURN_NULLS))
{
echo "<tr>";
echo "<td><b> Hostname : </b></td>";
echo "<td width='100'><input type='text' name='HOST_NAME' size='30' value=' " . $row['HOST_NAME'] . " ' /></td>";
echo "</tr>";
echo "<tr>";
echo "<td><b> IP Address : </b></td>";
echo "<td width='100'><input type='text' name='IP_ADDRESS' size='30' value= ' ".$row['IP_ADDRESS']. " '/></td>";
echo "</tr>";
echo "<tr>";
echo "<td><b> Last Login : </b></td>";
echo "<td width='100'><input name='LAST_LOGIN' type='text' size='30' value=' " .$row['LAST_LOGIN'] . " ' /> </td>";
echo "</tr>";
echo "<tr>";
echo "<td><b> Data : </b></td>";
echo "<td width='100'><textarea name='DATA_FYP' rows='10' cols='25'>".$row['DECRYPT_DATA']."</textarea></td>";
echo "</tr>";
echo "<tr>";
echo "<td><b> Date : </b></td>";
echo "<td width='100'><input name='DATE_REG' type='text' size='30' value=' " .$row['DATE_REG'] . " ' /> </td>";
echo "</tr>";
echo "<td> </td>";
echo "<td align='center'><input type='submit' name='Analyze' value='Analyze'></td>";
echo "</tr>";
}
echo "</form>";
echo "</table>";
?>
这是我的数据库。
这是我得到的错误。
答案 0 :(得分:1)
SELECT * FROM TABLE
用于提供表中所有列的数据,因此您无法使用
SELECT *,column_name from TABLE;
使用表格的别名
更改以下行 $query1 = "SELECT A.*,enc_dec.decrypt(A.DATA_FYP) AS DECRYPT_DATA FROM FYP A WHERE ID_USER='".$id."'";
答案 1 :(得分:0)
这与你的解密功能没什么关系。除非您指定表或其别名,否则不能单独使用*
并包含另一列(包括计算值或固定值作为伪列)。这会得到同样的错误:
select *, x as y from dual;
Error at Command Line : 2 Column : 9
Error report -
SQL Error: ORA-00923: FROM keyword not found where expected
但这没关系:
select d.*, x as y from dual d;
所以你需要:
$query1 = "SELECT FYP.*,enc_dec.decrypt(DATA_FYP) AS DECRYPT_DATA FROM FYP WHERE ID_USER='".$id."'";
或
$query1 = "SELECT f.*,enc_dec.decrypt(f.DATA_FYP) AS DECRYPT_DATA FROM FYP f WHERE f.ID_USER='".$id."'";
无论如何都不鼓励使用select *
;如果你明确列出你需要的列和它们应该的顺序,那就更清楚了。这里似乎没有太大的实际区别,但是如果在表中添加了更多的列,你就会提取数据而不是使用,在其他情况下(例如使用位置变量而不是命名变量),您可能会遇到错误。无论如何,指定列是一个很好的习惯。