поиск базы данных oracle с использованием php

Здесь четыре поля: oprid, oprname, empid, а другое поле – электронная почта. Я хочу искать oprid, oprname, empid или email, но он не работает,

Предупреждение: oci_fetch_array (): ORA-24374: определение не выполняется до извлечения или выполнения и выборки

<?php { include ('connection.php'); if(isset($_REQUEST['submit'])){ $optid = $_POST['OPRID']; $optdec = $_POST['OPRDEFNDESC']; $empid = $_POST['EMPLID']; $empmail = $_POST['EMAILID']; $query ="SELECT * FROM OPERATOR WHERE OPRID LIKE '%".$optid."%' or OPRDEFNDESC LIKE '%".$optdec."%' or EMPLID LIKE '%".$empid."%' or EMAILID LIKE '%".$empmail."%' "; } else{ $query="SELECT * FROM OPERATOR"; $objParse = oci_parse ($ora_conn, $query); } ?> <form action="multi.php" method="get" action="<?=$_SERVER['SCRIPT_NAME'];?>"> <table width="500" border="0" align="center"> <tr> <th>Operator ID <input name="OPRID" type="text" id="OPRID" value="";> <tr> <th>Operator Name <input name="OPRDEFNDESC" type="text" id="OPRDEFNDESC" value="";> <tr> <th>Person ID <input name="EMPLID" type="text" id="EMPLID" value="";> <tr> <th>Email ID <input name="EMAILID" type="text" id="EMAILID" value="";> <input type="submit" value="Search"></th> </tr> </table> </form> <table> <tr> <td>Operator ID</td> <td>Operator Name</td> <td>Person ID</td> <td>Email ID</td> </tr> <? while($objResult = oci_fetch_array($objParse, OCI_RETURN_NULLS+OCI_ASSOC)) { ?> <tr> <td><div align="center"><?=$objResult["OPRID"];?></div></td> <td><?=$objResult["OPRDEFNDESC"];?></td> <td><?=$objResult["EMPLID"];?></td> <td><div align="center"><?=$objResult["EMAILID"];?></div></td> <td align="center"><a href="Optr_Edit.php?OprID=<?=$objResult["OPRID"];?>">Edit</a> </td> </tr> <? } ?> </table> <? oci_free_statement($objParse); oci_close($ora_conn); } ?> </body> </html> 

Запрос должен быть выполнен, прежде чем вы сможете попробовать получить строки. oci_parse() не выполняет данный запрос.

Добавьте вызов выполнения перед извлечением:

 $success = oci_execute($objParse); 

Кроме того, в первом блоке вашего if вы не вызываете oci_parse() . Он называется только в else . Измените вызов oci_parse() для всех условий.

Ваш запрос уязвим для SQL Injection, потому что вы объединяете в него необработанные данные POST. Чтобы предотвратить SQL Injection, используйте связанные параметры:

 $optid = '%' . $_POST['OPRID'] . '%'; $optdec = '%' . $_POST['OPRDEFNDESC']. '%'; $empid = '%' . $_POST['EMPLID']. '%'; $empmail = '%' . $_POST['EMAILID']. '%'; $query ="SELECT * FROM OPERATOR WHERE OPRID LIKE :optid or OPRDEFNDESC LIKE '%:optdec%' or EMPLID LIKE :empid or EMAILID LIKE :empemail "; $objParse = oci_parse ($ora_conn, $query); oci_bind_by_name($objParse, ':optid', $optid); oci_bind_by_name($objParse, ':optdec', $optdec); oci_bind_by_name($objParse, ':empid', $empid); oci_bind_by_name($objParse, ':empemail', $empemail); $success = oci_execute($objParse);