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

时间:2016-08-26 16:16:44

标签: php oracle oracle11g

我一直在寻找几天,并尝试了各种形式的oci-fetch,而根本没有使用它。 我正在尝试做的是(代码跟随)获取提交的用户ID(我们在我们的机构中​​使用)并获得名字和姓氏的初始值,添加SSN的最后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

1 个答案:

答案 0 :(得分:0)

OCI扩展的PHP documentation非常好,并且有大量示例显示如何做你想做的事。

您的代码容易受到SQL Injection攻击,所以我修改了它以使用绑定。

<?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_OBrien这是一个不好的方法。你replied

  

可能发生的最糟糕情况是,有人可以使用学生的帐户登录学生帐户并查看他们的成绩或通过电子邮件发送给某人。

我认为 非常糟糕 。如果该帐户用于通过电子邮件发送炸弹威胁或色情内容怎么办?由于您对应用程序安全的懒惰态度,无辜的人可能会面临刑事指控。