PHP mysqli - 从预处理语句返回一个关联数组

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文档和stack exchange中查找了这个问题,并找到了一些建议,但似乎无法让它们起作用。 有人能帮忙吗?

1个回答

17
如果您安装了MySql Native Driver扩展(mysqlnd),您可以使用get_result方法获取结果集,然后按照通常的方式进行提取:
$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 :)

1
太棒了,它成功地返回了一个关联数组,但是它只返回了查询的第一行。我需要把它放到foreach循环中来提取其余的行并将它们插入到一个新数组中吗? - Chris Schmitz
3
@ChrisSchmitz 是的,只需循环执行 while($row = $result->fetch_array(MYSQLI_ASSOC)){ var_dump($row); }; - hodl
4
仅限于mysqlnd可用。 - greg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接