[未使用WAMP Server在PHP中从Oracle中获取数据

问题描述 投票:1回答:1

我正在尝试使用以下代码从WAMP Server上的PHP中的Oracle获取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'];
}

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

php oracle wamp oci
1个回答
0
投票
  • 检查您的网络服务器日志文件是否有错误

  • 在开发过程中,比将其添加到脚本顶部以确保显示错误要糟糕得多:

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

    记住要删除这些内容,将它们放在脚本中的位置

  • 考虑将HEREDOC或NOWDOC用于复杂的SQL语句,请参见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);
    }
    

    您可能也想要一个或多个绑定变量作为日期,除非它确实永远不会改变。

© www.soinside.com 2019 - 2024. All rights reserved.