0

コードには、データベースへの 6 ~ 8 個のクエリがある場所がほとんどありません。さまざまなクエリ (選択、挿入、更新、プロシージャ コール) は、すべてのクエリを 1 つにマージすることはできません。必要ですが、機能自体は見栄えがよくありません。それでも、リクエストにいくつかの変数をアタッチする機能も必要です。

おそらく、誰かがそのようなものを持っているか、この機能を修正するのを手伝ってくれます.

更新: 問題は解決されました。

function execSql($conn,$xsql,$sql_no,$return_val,
                      $binding_val_name,$binding_val,
                       $bind_additional1,$bind_additional2){

    $stmt = oci_parse($conn, $xsql);
    if($binding_val_name !='')
      if($bind_additional1)
        oci_bind_by_name($stmt, $binding_val_name,
                          $binding_val,$bind_additional1,$bind_additional2);
      else
        oci_bind_by_name($stmt, $binding_val_name, $binding_val);

    oci_execute($stmt, OCI_NO_AUTO_COMMIT);
    if($return_val!='')
      oci_fetch_all($stmt,$result);

    checkError($stmt,$sql_no.'. '.$xsql);
    oci_free_statement($stmt);

    if($return_val!=''&&$return_val!='1')
      return $result[$return_val][0];
    if($binding_val_name!='')
      return $binding_val;
  }

および呼び出しの例

$doc = execSql($conn, $sql,'2', '',':doc','',8, SQLT_INT);
$reg_key = execSql($conn, $select,'3', 'REG_KEY',':doc',$doc);

配列の使用

    if($binding_val_name !='')
          if(is_array($binding_val))
            if($bind_additional1[0])
              for ($i=0; $i < count($bind_additional1) ; $i++) { 
                oci_bind_by_name($stmt, $binding_val_name[$i],
 $binding_val[$i],$bind_additional1[$i],$bind_additional2[$i]);.
              }
            else
              for ($i=0; $i < count($bind_additional1) ; $i++) { 
                oci_bind_by_name($stmt, $binding_val_name[$i], $binding_val[$i]);
              }
          else
            if($bind_additional1)
              oci_bind_by_name($stmt, $binding_val_name,
 $binding_val,$bind_additional1,$bind_additional2);
            else
              oci_bind_by_name($stmt, $binding_val_name, $binding_val);
4

1 に答える 1

0

最終的に、すべてのリクエストを一般的に実行する関数を作成しました。

function execSql($conn,$xsql,$sql_no,$return_val, $binding_val_name,$binding_val,$bind_additional1,$bind_additional2){
    $stmt = oci_parse($conn, $xsql);
    if($binding_val_name !=''){
      if(is_array($binding_val_name))
        foreach ($binding_val_name as $key => $value) {
          oci_bind_by_name($stmt, $key, $binding_val_name[$key]);
        }
      else if($bind_additional1)
        oci_bind_by_name($stmt, $binding_val_name, $binding_val,$bind_additional1,$bind_additional2);
      else
        oci_bind_by_name($stmt, $binding_val_name, $binding_val);
    }
    oci_execute($stmt, OCI_NO_AUTO_COMMIT);
    if($return_val!='')
      oci_fetch_all($stmt,$result);

    $xsql = $xsql.' !!! sql_no:'.$sql_no.' return_val:'.$return_val.' binding_val_name:'./*(is_array($binding_val_name))?print_r($binding_val_name):*/$binding_val_name.' binding_val:'.$binding_val.' result:'.$result[$return_val][0];
    //echo /*' sql:'.$xsql.*/'!!! sql_no:'.$sql_no.' return_val:'.$return_val.' binding_val_name:'.$binding_val_name.' binding_val:'.$binding_val.' result:'.$result[$return_val][0];
    checkError($stmt,$sql_no.'. '.$xsql);
    oci_free_statement($stmt);

    if($return_val!=''&&$return_val!='1'||$return_val=='array')
      return (count($result)>1)?$result:$result[$return_val][0];
    if($binding_val_name!='')
      return $binding_val;
  }
于 2013-09-24T06:29:46.630 に答える