首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用oracle 10g和php在单个数据库连接中执行多个查询

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

Stack Overflow用户
提问于 2016-01-28 09:46:25
回答 1查看 1.6K关注 0票数 0

我希望使用oracle 10g和php在一个数据库连接中运行多个sql查询。这里,对于每个sql查询,我必须创建数据库连接。是否有任何方法可以在单个数据库连接中运行多个sql查询,或者只能以这种方式获取数据?因为当我们必须运行50个查询时,我们必须编写50次如下所示。

代码语言:javascript
复制
<?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中。不是在同一个数组里。

EN

回答 1

Stack Overflow用户

发布于 2016-01-28 13:19:04

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

我不想在这里贬低你,但你的问题太天真了--太天真了--所以它应该作为非话题来结束。

您的代码缺乏对模组 编程和变量作用域的理解。这些应该包括在第二天的编程-从零开始的课程。但奇怪的是,它包含了一些更复杂的PHP特定编程,但是将SQL挂起--它看起来像是其他人快速编写的代码,现在您正在尝试扩展它的功能。

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

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

代码语言:javascript
复制
<?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状态合并到单个select中。由于您向我们展示的代码只是简单地丢弃了结果,所以很难说您应该如何处理任务。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35057918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档