将选择值传递给 Oracle 数据库


Passing a select value to Oracle database

我正在处理这段代码,我使用 Oracle HR 数据库作为我的数据库,我正在尝试根据多项选择过滤数据库结果,但我不断收到此错误:

警告: oci_execute((: ORA-00933
警告: oci_fetch_array((: ORA-24374

没有结果,我的代码:

索引.php

<html>
<head>
<title>Employees Search</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script type="text/javascript">
function checkinput()
{
    if(document.Form2.DEPARTMENT_ID.value=="" && document.Form2.MANAGER_ID.value=="")
    {
        alert("Please select department or manager!");
        return;
    }
    document.Form2.submit();
}
</script>
</head>
<body> 
<form method="get" name="Form2" id="Form2">
    <select  id="DEPARTMENT_ID" name="DEPARTMENT_ID">
        <option value="">DEPARTMENT:</option>
        <option value="90">90</option>
        <option value="60">60</option>
        <option value="100">100</option>
        <option value="30">30</option>
    </select>
    <select id="MANAGER_ID" name="MANAGER_ID" >
        <option value="">MANAGER ID:</option>
        <option value="100">100</option>
        <option value="102">102</option>
        <option value="103">103</option>
        <option value="108">108</option>
    </select>
    <input type="button" value="   Search   " onclick="checkinput()" />
</form>
<br />
<div id="result"> 
<?php include "emp.php"; ?>
</div>
</body>
</html>

电磁脉冲.php

<?php
    $conn = oci_connect('hr', ' ', 'My-PC:1521/XE');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    if(isset($_GET['DEPARTMENT_ID'])||isset($_GET['MANAGER_ID'])){
        $DEPARTMENT_ID=$_GET['DEPARTMENT_ID'];
        $MANAGER_ID=$_GET['MANAGER_ID'];
        $sql="SELECT * FROM EMPLOYEES WHERE ";
        if($DEPARTMENT_ID != "") 
        {
            $sql = $sql."DEPARTMENT_ID=".$DEPARTMENT_ID;
            if($MANAGER_ID != "") 
            {
                $sql = $sql."MANAGER_ID=".$MANAGER_ID;
            }
        }
        else
        {
            if($MANAGER_ID != "") 
            {
                $sql = $sql."MANAGER_ID=".$MANAGER_ID;
            }
        }
        $stid = oci_parse($conn, $sql);
        oci_execute($stid);
        echo " <table><tr><th>Employee No.</th><th>First Name</th><th>Last Name</th><th>PHONE NUMBER</th><th>Email</th><th>Job Title</th><th>MANAGER_ID</th><th>DEPARTMENT_ID</th></tr>";
        while ($row = oci_fetch_array($stid, OCI_ASSOC )) {
            echo "<tr>";
            echo "<td>".$row['EMPLOYEE_ID']."</td>";
            echo "<td>".$row['FIRST_NAME']."</td>";
            echo "<td>".$row['LAST_NAME']."</td>";
            echo "<td>".$row['PHONE_NUMBER']."</td>";
            echo "<td>".$row['EMAIL']."</td>";
            echo "<td>".$row['JOB_ID']."</td>";
            echo "<td>".$row['MANAGER_ID']."</td>";
            echo "<td>".$row['DEPARTMENT_ID']."</td>";
            echo "</tr>";
            echo"</table>";
        }
    }
?>

一切似乎都是正确的,当部门和经理 ID 不为空时,需要 SQL。

<?php
    $conn = oci_connect('hr', ' ', 'My-PC:1521/XE');
    if (!$conn) {
        $e = oci_error();
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    if(isset($_GET['DEPARTMENT_ID'])||isset($_GET['MANAGER_ID'])){
        $DEPARTMENT_ID=$_GET['DEPARTMENT_ID'];
        $MANAGER_ID=$_GET['MANAGER_ID'];
        $sql="SELECT * FROM EMPLOYEES WHERE ";
        if($DEPARTMENT_ID != "") 
        {
            $sql = $sql."DEPARTMENT_ID=".$DEPARTMENT_ID;
            if($MANAGER_ID != "") 
            {
                $sql = $sql."AND MANAGER_ID=".$MANAGER_ID;
            }
        }
        else
        {
            if($MANAGER_ID != "") 
            {
                $sql = $sql."MANAGER_ID=".$MANAGER_ID;
            }
        }
        $stid = oci_parse($conn, $sql);
        oci_execute($stid);
        echo " <table><tr><th>Employee No.</th><th>First Name</th><th>Last Name</th><th>PHONE NUMBER</th><th>Email</th><th>Job Title</th><th>MANAGER_ID</th><th>DEPARTMENT_ID</th></tr>";
        while ($row = oci_fetch_array($stid, OCI_ASSOC )) {
            echo "<tr>";
            echo "<td>".$row['EMPLOYEE_ID']."</td>";
            echo "<td>".$row['FIRST_NAME']."</td>";
            echo "<td>".$row['LAST_NAME']."</td>";
            echo "<td>".$row['PHONE_NUMBER']."</td>";
            echo "<td>".$row['EMAIL']."</td>";
            echo "<td>".$row['JOB_ID']."</td>";
            echo "<td>".$row['MANAGER_ID']."</td>";
            echo "<td>".$row['DEPARTMENT_ID']."</td>";
            echo "</tr>";
            echo"</table>";
        }
    }
?>

更改线路 : $sql = $sql."AND MANAGER_ID=".$MANAGER_ID;

可能是 SQL 无法解析此查询的原因。

如果两者都不为空并假设为 10,那么您的查询将看起来像 SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID=10 MANAGER_ID=10; 这在语法上不正确。