使用 oracle 10g 和 php 在单个数据库连接中执行多个查询


Execute multiple queries in a single database connection using oracle 10g and php

我想使用 oracle 10g 和 php 在单个数据库连接中运行多个 sql 查询。在这里,对于每个sql查询,我都必须创建数据库连接。有没有办法在单个数据库连接中运行多个sql查询,或者我们只需要以这种方式获取数据?因为当我们必须运行 50 个查询时,我们必须像下面这样写 50 次。

<?php
include("mydb.php");
// run query
$sql6 = "select * from dat where to_char(WD,'dd/mm')='19/08'";
$stid6=oci_parse($conn, $sql6);
// set array
$arr6 = array();
if(!$stid6){
$e=oci_error($conn);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
$r6=oci_execute($stid6);
if(!$r6){
$e=oci_error($stid6);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
// look through query
while($row = oci_fetch_array($stid6,OCI_ASSOC)){
  // add each row returned into an array
  $arr6[] = array(($row['WD']) , (float)$row['DATA']);
}
oci_free_statement($stid6);
oci_close($conn);
?>
<?php
include("mydb.php");
// run query
$sql7 = "select * from dat where to_char(WD,'dd/mm')='11/03'";
$stid7 = oci_parse($conn, $sql7);
// set array
$arr7 = array();
if(!$stid7){
$e=oci_error($conn);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
$r7=oci_execute($stid7);
if(!$r7){
$e=oci_error($stid7);
trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
}
// look through query
while($row = oci_fetch_array($stid7,OCI_ASSOC)){
  // add each row returned into an array
  $arr7[] = array(($row['WD'])) , (float)$row['DATA']);
}

oci_free_statement($stid7);
oci_close($conn);
?>
................
................

*对不起,我忘了提到我们将按天数据存储在不同的数组中。我的意思是说 11/03 的数据将存储在 arr1 中,19/08 的数据将存储在 arr2 中。不在同一数组中。

(这应该是一个注释,但有点长)

我不想在这里贬低,但你的问题令人震惊的幼稚——以至于它应该作为题外话结束。

您的代码表现出对模块化编程和变量作用域的缺乏理解。这些应该在从头开始编程课程的第 2 天涵盖。但奇怪的是,包括一些更复杂的 PHP 特定编程,但令人震惊的 SQL - 看起来其他人编写代码是为了快速破解,现在您正在尝试扩展其功能。

您正在使用 Oracle 数据库,这引发了各种各样的问题,即为什么要尝试这样做(Oracle 很昂贵;怎么有人负担得起,但负担不起为您提供所需的技能?)

如您所描述的,该问题的解决方案是将脚本重新实现为将 OCI 连接和 SQL 语句作为参数的函数,然后简单地......

<?php
include("mydb.php");
$queries=array(
    "select * from dat where to_char(WD,'dd/mm')='11/03'",
    "select * from dat where to_char(WD,'dd/mm')='19/08'"
);
foreach ($queries as $sql) {
   run_qry($sql, $conn);
}
oci_close($conn);
exit;
function run_query($sql, $conn)
{
   $stid=oci_parse($conn, $sql);
   // set array
   $arr = array();
   if(!$stid){
   $e=oci_error($conn);
      trigger_error(htmlentities($e[message],ENT_QUOTES),E_USER_ERROR);
   }
   ...
   oci_free_statement($stid);
   return $arr;
}

但是,由于 2 个示例查询具有完全相同的结构,因此还有其他方法可以得出多个查询的结果 - 使用 OR 或 UNION 将 SQL 状态合并为单个选择,使用参数化查询。由于您向我们展示的代码只是丢弃了结果,因此很难说您应该如何处理任务。