0

少し前に、このサイトの VolkerK の助けを借りて、Oracle データベースにクエリを実行し、インデックスに応じて適切にフォーマットされた PHP 配列にコンテンツを配置する関数を作成しました。これが元の質問です。

問題は、場合によっては、簡単なクエリから単一の値を返したいだけで、そうすると次のエラーが発生することです。Notice: Undefined index:

私が使用しているコードは次のとおりです。

function oracleGetData($query, $id = null) {
    global $conn;

    $results = array();
    $sql = OCI_Parse($conn, $query);
    OCI_Execute($sql);
    while ( false!==($row=oci_fetch_assoc($sql)) ) {
        $results[ $row[$id] ] = $row;
    }

    // remove one layer if there's only one record
    if(count($results) == 1 and is_null($id)) {
        $results = array_pop($results);
    }
    return $results;
}

配列にデータを入力する行を次のように変更しようとしました:

if(is_null($id)) {
    while ( false!==($row=oci_fetch_assoc($sql)) ) {
        $results[ $row ] = $row;
    }
} else {
    while ( false!==($row=oci_fetch_assoc($sql)) ) {
        $results[ $row[$id] ] = $row;
    }
}

基本的に、$id 変数が null の場合、それへのすべての参照を削除しますが、「警告: 無効なオフセット タイプ」エラーが発生します。

必要な単一のフィールドを関数に渡そうとしましたが、同じエラーが発生しました。

ありがとうございました

4

1 に答える 1

1

おそらく、 $id が NULL の場合、次のように、インデックスに連番を使用できます。

function oracleGetData($query, $id = null)
  { 
  global $conn; 

  $results = array(); 
  $sql = OCI_Parse($conn, $query); 
  OCI_Execute($sql); 

  if(is_null($id)) {
    $idx = 1;

    while (false!==($row=oci_fetch_assoc($sql))) { 
      $results[ $idx ] = $row;
      $idx = $idx + 1;
    }
  } else { 
    while ( false!==($row=oci_fetch_assoc($sql))) { 
      $results[ $row[$id] ] = $row;
    }
  } 

  // remove one layer if there's only one record 

  if(count($results) == 1 and is_null($id)) { 
    $results = array_pop($results); 
  } 

  return $results; 
  } 

共有してお楽しみください。

于 2012-07-11T11:14:36.420 に答える