0

我有一个简单的 PHP 函数,它将根据唯一 ID 从数据库中获取信息:

function oracleGetGata($query, $id="id") {
    global $conn;

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

所以例如$array = oracleGetData('select * from table')会返回:

[1] => Array
(
    [Title] => Title 1
    [Description] => Description 1
)
[2] => Array
(
    [Title] => Title 2
    [Description] => Description 2
)

这很好,但是,如果我只想返回一条记录$array = oracleGetData('select * from table where id = 1'),它会返回如下数据:

[] => Array
(
    [Title] => Title 1
    [Description] => Description 1
)

我不仅不确定如何引用它(没有任何标识数组)我还想以某种方式更改我的函数,所以如果它只返回一条记录,它将只是一个简单的一维数组。

我研究了常用的 PHP 数组函数,但找不到任何有用的东西,也找不到确定数组深度的简单方法。

非常感谢任何帮助,谢谢

4

3 回答 3

4

使用array_pop()

$array = array_pop(oracleGetData('select * from table where id = 1'));

然后你会得到一个数组:

Array
(
    [Title] => Title 1
    [Description] => Description 1
)

而不是嵌入另一个数组:

Array
(
    [] => Array
    (
        [Title] => Title 1
        [Description] => Description 1
    )
}
于 2012-05-16T11:18:09.973 回答
1

我认为您的脚本中存在逻辑错误:

改变

$results[ $row[$id] ] = $row;

进入

$results[] = $row;

问题是,您希望将数据库键值作为数组键值,但您不知道数据库键,因为您不知道查询会是什么样子。

你可以试试:

$results[$row['id']] = $row;

但这仅在您的所有结果都具有名为“id”的数据库键时才有效。

于 2012-05-16T11:15:03.217 回答
0

你在函数签名中传递了一个 $id,但在循环中你使用了 $row[$id],为什么?也许错误就在那里。

如果你想在你的结果集中有一个顺序 id,你不需要使用 $id,你可以使用 array_push() 函数

array_push($result, $row);

或者

$results[] = $row;
于 2012-05-16T11:21:48.243 回答