php - 使用php搜索oracle数据库

标签 php oracle

这里有 4 个字段,一个是 oprid、oprname、empid,另一个字段是电子邮件。我想通过 oprid、oprname、empid 或电子邮件进行搜索,但不起作用,

Warning: oci_fetch_array(): ORA-24374: define not done before fetch or execute and fetch

  <?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 的第一个 block 中,您不会调用 oci_parse()。它仅在 else 中被调用。更改为针对所有条件调用 oci_parse()

您的查询容易受到 SQL 注入(inject)攻击,因为您将原始 POST 数据连接到其中。为了防止 SQL 注入(inject),请使用绑定(bind)参数:

$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);

关于php - 使用php搜索oracle数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19322733/

相关文章:

php - 自定义 apache 500 错误 PHP 页面

oracle - Sqoop访问特定的Oracle模式

sql - 如何从当前行和上一行中获取唯一项的总和,但忽略重复项 Oracle SQL

php - 正则表达式在在线测试器中运行良好,但在我的页面上不起作用

php - 在 codeigniter 错误的 View 中加载 css

php - Stripe 签账卡使用 php Rest api 时出现 fatal error

sql - 在触发器中执行过程

regex - PL/SQL 正则表达式匹配不在引号内的逗号

linux - 如何在 Fedora 23 上使用脚本自动启动 Oracle 11g?

php - 如何在 javascript 函数中使用 php