Reputation: 45
I'm working on this code I used Oracle HR database as my database, I'm trying to filter database results based on multiple select, but I keep getting this error:
Warning: oci_execute(): ORA-00933
Warning: oci_fetch_array(): ORA-24374
and no results, my code:
index.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>
emp.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>";
}
}
?>
Upvotes: 0
Views: 655
Reputation: 876
Everything seems correct expect SQL when Department and manager id is not null.
<?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>";
}
}
?>
Changed Line :
$sql = $sql."AND MANAGER_ID=".$MANAGER_ID;
May be reason as SQL failed to parse this query.
As If both are not empty and assumed 10 then you query will be looked like SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID=10 MANAGER_ID=10;
which is not syntactically correct.
Upvotes: 1