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

时间:2016-01-28 09:46:25

标签: php sql oracle

我想使用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中。不在同一个数组中。

1 个答案:

答案 0 :(得分:0)

(这应该是评论,但有点长)

我不想在这里贬低,但你的问题是天真的 - 这太多了,所以它应该被视为偏离主题。

您的代码对modular programming和变量scope缺乏了解。这些应该在从头开始编程的第2天开始。但奇怪的是包括一些更复杂的PHP特定编程,但是apalling SQL - 看起来像其他人编写代码作为快速黑客,现在你正在尝试扩展其功能。

你正在使用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个示例查询具有完全相同的结构,因此还有其他方法可以获得多个查询的结果 - 使用参数化查询将SQL状态合并到使用OR或UNION的单个选择中。由于你向我们展示的代码只是抛弃了结果,很难说你应该如何处理这项任务。

相关问题