我正在尝试使用以下代码从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'];
}
数据库连接工作正常。任何帮助将不胜感激。
检查您的网络服务器日志文件是否有错误
在开发过程中,比将其添加到脚本顶部以确保显示错误要糟糕得多:
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);
}
您可能也想要一个或多个绑定变量作为日期,除非它确实永远不会改变。