Php 从查询返回对象数组?

Php 从查询返回对象数组?,php,mysqli,Php,Mysqli,我需要一个函数来返回一个服务数组,每个服务都包含一个id和一个名称。 我一直在查看mysqli文档,但无法验证是否存在比此更智能的解决方案: function getServices() { $services = array(); $stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?'); $stmt->bind_param("i", $this->

我需要一个函数来返回一个服务数组,每个服务都包含一个id和一个名称。 我一直在查看mysqli文档,但无法验证是否存在比此更智能的解决方案:

function getServices() {
    $services = array();

    $stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?');
    $stmt->bind_param("i", $this->clientId);
    $stmt->execute();
    $stmt->bind_result($id, $name);
    while ($stmt->fetch()) {
        $service = array();
        $service['id'] = $id;
        $service['name'] = $name;
        $services[] = $service;
    }
    $stmt->close();

    return $services;
}

我必须自己构建生成的数组,这似乎有点麻烦。有没有办法让mysql使用所选列构建阵列?

切换到PDO,您可以选择


切换到PDO,您可以选择


我不使用mysqli,但从,我相信这应该是可行的:

$stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?');
$stmt->bind_param("i", $this->clientId);
$stmt->execute();

$result   = $stmt->get_result();
$services = $result->fetch_all( MYSQLI_ASSOC );

$stmt->close();

return $services;
因此使用:
1.
2.


它是针对PHP>=5.3.0的。

我不使用mysqli,但是从,我相信这应该可以工作:

$stmt = $this->db->prepare('SELECT id, name FROM services WHERE client_id=?');
$stmt->bind_param("i", $this->clientId);
$stmt->execute();

$result   = $stmt->get_result();
$services = $result->fetch_all( MYSQLI_ASSOC );

$stmt->close();

return $services;
因此使用:
1.
2.


它是针对PHP>=5.3.0的。

我看不出为什么不能使用此代码。即使mysql构建版本存在(我怀疑,但我不确定,我总是这样使用),也没有必要更改。@19greg96-OP使用的是mysqli,而不是mysqli。我不明白为什么不能使用此代码。即使mysql构建版本存在(我怀疑,但我不确定,我总是这样使用),也没有必要更改。@19greg96-OP使用的是mysqli,而不是mysqlSeconded。您可以传递fetch参数
$stmt->fetchAll(PDO::fetch_ASSOC)
以返回关联数组。这里还有很多其他选择:附议。您可以传递fetch参数
$stmt->fetchAll(PDO::fetch_ASSOC)
以返回关联数组。这里还有很多其他选择:谢谢你的解决方案。遗憾的是,我的服务器运行的是PHP5.2,所以
get\u result
方法不存在。@DennisMadsen:很抱歉听到这个消息。在这种情况下,如果您认为值得努力,您可以扩展mysqli_stmt并自己实现它。或者,如果您认为值得努力的话,可以使用
PDO
,而不是
mysqli
。谢谢您的解决方案。遗憾的是,我的服务器运行的是PHP5.2,所以
get\u result
方法不存在。@DennisMadsen:很抱歉听到这个消息。在这种情况下,如果您认为值得努力,您可以扩展mysqli_stmt并自己实现它。或者,如果您认为值得努力,可以使用
PDO
,而不是
mysqli