2012-07-11 110 views
0

前一段时间,在VolkerK的帮助下,我创建了一个查询Oracle数据库并将内容放入一个整齐格式化的PHP数组,取决于索引。 Here's the original question查询Oracle数据库的功能 - '未定义索引'通知

的问题是,在某些情况下,我只是想从一个快速查询返回一个值,而当我这样做,我得到了以下错误: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变量为空,删除对它的所有引用,但那么我会收到'Warning:Illegal offset type'错误。

任何帮助将不胜感激,我已经试过将单个字段传入我需要的功能,但得到相同的错误。

谢谢

回答

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; 
    } 

分享和享受。

+0

这绝对是完美的,谢谢鲍勃! – Nick 2012-07-11 12:40:33