PHP -需要在网页中回显/打印Oracle查询的结果


PHP - Need to echo/print result of Oracle query in web page

我已经搜索了几天,尝试了各种形式的oci-fetch,但根本没有使用它。我要做的是(代码如下)获得一个提交的用户ID(我们在我们的机构中使用),并获得姓和名的首字母,添加社会安全号的最后4位数字,并作为用户的重置密码发送。

我在sql Developer中运行了sql的第一部分,并满意地得到了预期的结果。

在那里我有一个问题是采取sql的结果,并使用它来更新ldap,然后发送一个网页。阻塞是通过php操作获取sql的结果。现在,我只是尝试回显或打印以确保我得到了结果密码,但这没有发生。

下面是代码(为安全起见进行了调整):

<?php
$user = STRTOUPPER($_POST['uid']); //get input text
$conn = oci_connect("A_USER", "USER_PWORD>*", "DBSID");
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
$query = "select UPPER(substr(a.per_lname,1,1)) || LOWER(substr(a.per_fname,1,1)) || a.per_sno from mccuser.Pers_info a where a.per_id = ('" . $user ."')";
$stid = oci_parse($conn, $query);
$success = oci_execute($stid);
//From this point, I've tried different approaches, including not even using oci_fetch.
oci_fetch_array($stid, OCI_RETURN_NULLS+OCI_ASSOC);
$newpw = $success;
echo $newpw;
?>

我非常感谢你的建议。

谢谢,dfonteno

关于OCI扩展的PHP文档非常出色,并且有大量示例展示了如何做您想做的事情。

你的代码很容易受到SQL注入攻击,所以我已经修改它使用绑定。

<?php
$user = STRTOUPPER($_POST['uid']); //get input text
$conn = oci_connect('A_USER', 'USER_PWORD>*', 'DBSID', 'UTF8'); // explicitly use UTF-8
if (!$conn) {
    $e = oci_error();
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
}
// field is aliased as 'PWD' since you want an associative array as result.
$query = 'select UPPER(substr(a.per_lname,1,1)) || LOWER(substr(a.per_fname,1,1)) || a.per_sno as pwd from mccuser.Pers_info a where a.per_id = (:usr)';
$stid = oci_parse($conn, $query);
// bind the user variable.
oci_bind_by_name($stid, ':usr', $user);
oci_execute($stid);
$result = oci_fetch_assoc($stid);
$newpw = $result['PWD']; // note the key is always uppercase by default.
echo $newpw;

那应该是你想要的。然而,我同意mike_brien的观点,这是一种糟糕的做法。你回答:

可能发生的最坏的情况是有人可以登录到学生的帐户,看到他们的成绩或给别人发电子邮件,使用学生的帐户。

我认为非常糟糕。如果这个账户被用来发送炸弹威胁邮件,或者色情邮件呢?一个无辜的人可能会因为您对应用程序安全的懒惰处理而面临刑事指控。