【问题标题】:PHP mysqli - return an associative array from a prepared statementPHP mysqli - 从准备好的语句返回关联数组
【发布时间】:2013-02-08 03:33:12
【问题描述】:

我正在尝试使用 mysqli 来准备一个语句,以便安全地将变量值传递给查询。所有这些都对我有用,但我遇到的问题是将结果放入关联数组中。 到目前为止,这是我的结构:

$query = $c->stmt_init();
$query->prepare("SELECT e._id,e.description,e.eventDate,e.eventTime,e.address,e.locationDescription,i.guestId,r.guestId IS NOT NULL AS 'RSVP-ed'  FROM eventList AS e  JOIN inviteList AS i ON e._id = i.eventId LEFT JOIN rsvpList AS r ON r.eventId = e._id AND i.guestId = r.guestId JOIN guestList AS g ON g._id = i.guestId WHERE g.groupName = ?");
$query->bind_param('s',$groupName);
if ($result = $query->execute()){
    $a  = $result->fetch_array(MYSQLI_ASSOC); // this doesn't work :/
} else{
    error_log ("Didn't work");
}

如您所见,我有很多列被传回,所以我不想将它们每一个绑定到一个变量。

最重要的是,最终目标是将一个 json 编码的关联数组传回我的应用程序的其余部分。

我在 php 文档和堆栈交换中查找了该问题,并找到了建议,但我似乎无法让它们正常工作。有人可以帮忙吗??

【问题讨论】:

    标签: php arrays mysqli


    【解决方案1】:

    如果你有 MySql Native Driver 扩展(mysqlnd),你可以使用get_result 方法获取一个ResultSet,然后按照通常的方式从中获取:

    $query = $c->prepare("SELECT e._id,e.description,e.eventDate,e.eventTime,e.address,e.locationDescription,i.guestId,r.guestId IS NOT NULL AS 'RSVP-ed'  FROM eventList AS e  JOIN inviteList AS i ON e._id = i.eventId LEFT JOIN rsvpList AS r ON r.eventId = e._id AND i.guestId = r.guestId JOIN guestList AS g ON g._id = i.guestId WHERE g.groupName = ?");
    $query->bind_param('s',$groupName);
    $query->execute();
    $result = $query->get_result();
    $a  = $result->fetch_array(MYSQLI_ASSOC); // this does work :)
    

    【讨论】:

    • 太棒了,它工作并返回了一个关联数组,但它只返回查询的第一行。我是否需要将其放入 foreach 循环中以将其余行拉出并将它们插入新数组中??
    • @ChrisSchmitz 是的,只需循环 while($row = $result->fetch_array(MYSQLI_ASSOC)){ var_dump($row); };
    • 这仅适用于 mysqlnd
    猜你喜欢
    • 1970-01-01
    • 2012-01-31
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多