【问题标题】:Data not getting fetched from Oracle in PHP using WAMP Server未使用 WAMP 服务器从 PHP 中的 Oracle 获取数据
【发布时间】:2020-02-02 08:40:42
【问题描述】:

我正在尝试使用以下代码从 WAMP 服务器上的 PHP 中的 Oracle 获取数据,但是没有获取数据,我也没有收到任何错误。但是当我直接在 Oracle 上执行相同的查询时,我正在获取数据。此外,在同一个 php 文件中使用相同的连接参数,我可以为另一个查询获取数据

$server = "localhost";
$sid = "xe";
$user = "hrs";
$passwd = "hrs123";

$conn = oci_connect($user, $passwd, $server."/".$sid);
if (!$conn) {
    $e = oci_error();
    echo $m['message'], "\n";
    exit;

}
else{
}

$staffno = test_input($_POST['field1']);

if($staffno!='')
{
$exempquery="select stno as stno, nvl(ffname,'')||' '||nvl(lname,'') as fname, substr(gradep,0,1) as grd, nvl(decode(sex,'M','MALE','F','FEMALE'),'') as sex, to_char(birth_dt,'dd-mm-yyyy') as birthdt, to_char(sep_dt,'dd-mm-yyyy') as sepdt, to_char(ret_dt,'dd-mm-yyyy') as retdt, sepdes from emp_master  where stno='$staffno' and ((sep_dt<='31-03-2013' and ret_dt<='31-03-2013') or (sep_dt is null and ret_dt<='31-03-2013'))";


    $exempstid=oci_parse($conn,$exempquery);

    $exempchk=oci_execute($exempstid);
    $exemprow=oci_fetch_array($exempstid, OCI_BOTH);


    $name=$exemprow['FNAME'];
    $grd=$exemprow['GRD'];
    $sex=$exemprow['SEX'];
    $birthdt=$exemprow['BIRTHDT'];
    $sepdt=$exemprow['SEPDT'];
    $retdt=$exemprow['RETDT'];
    $sepdes=$exemprow['SEPDES'];
}

数据库连接工作正常。 任何帮助将不胜感激。

【问题讨论】:

  • 检查oci_parse是否返回false,如果是则显示oci_error()的内容。 oci_execute
  • 试过了,但什么都没有显示

标签: php oracle wamp oracle-call-interface


【解决方案1】:
  • 检查您的网络服务器日志文件是否有错误

  • 在开发过程中,您最好将其添加到脚本顶部以确保显示错误:

    error_reporting(E_ALL);
    ini_set('display_errors', 'On');
    

    请记住在您将脚本放入作品的位置删除这些

  • 考虑对复杂的 SQL 语句使用 HEREDOC 或 NOWDOC,请参阅PHP 5.3 "NOWDOCS" make SQL escaping easier。

  • 使用OCI_ASSOC 代替(默认)OCI_BOTH。

  • 在走得太远之前,您必须重写 SQL 语句以使用绑定变量,因为将$staffno 连接到语句中的方式是security risk(并且会影响性​​能和可伸缩性)。我没有你的数据,但可以这样做:

    $exempquery="select stno as stno, nvl(ffname,'')||' '||nvl(lname,'') as fname, substr(gradep,0,1) as grd, nvl(decode(sex,'M','MALE','F','FEMALE'),'') as sex, to_char(birth_dt,'dd-mm-yyyy') as birthdt, to_char(sep_dt,'dd-mm-yyyy') as sepdt, to_char(ret_dt,'dd-mm-yyyy') as retdt, sepdes from emp_master  where stno = :staffnobv and ((sep_dt<='31-03-2013' and ret_dt<='31-03-2013') or (sep_dt is null and ret_dt<='31-03-2013'))";
    
    $s = oci_parse($c, $exempquery);
    if (!$s) {
        $m = oci_error($c);
        trigger_error('Could not parse statement: '. $m['message'], E_USER_ERROR);
    }
    
    $r = oci_bind_by_name($s, ":staffnobv", $staffno);
    if (!$r) {
        $m = oci_error($s);
        trigger_error('Could not bind a parameter: '. $m['message'], E_USER_ERROR);
    }
    
    $r = oci_execute($s);
    if (!$r) {
        $m = oci_error($s);
        trigger_error('Could not execute statement: '. $m['message'], E_USER_ERROR);
    }
    

    您可能还需要一个或多个日期绑定变量,除非它真的永远不会改变。

【讨论】:

    猜你喜欢
    • 2014-10-15
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多