PHP mysqli - 从准备好的语句返回关联数组

Posted

技术标签:

【中文标题】PHP mysqli - 从准备好的语句返回关联数组【英文标题】:PHP mysqli - return an associative array from a prepared statement 【发布时间】: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 文档和堆栈交换中查找了该问题,并找到了建议,但我似乎无法让它们正常工作。有人可以帮忙吗??

【问题讨论】:

【参考方案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

以上是关于PHP mysqli - 从准备好的语句返回关联数组的主要内容,如果未能解决你的问题,请参考以下文章

php mysqi bind_param 变量数与准备好的语句中的参数数不匹配[重复]

从 mysql_query 转换为准备好的语句 (mysqli/PDO)?必要的?

什么时候在 PHP Mysqli 中使用准备好的语句? - 用户表单搜索输入与选择查询

如何使用mysqli准备好的语句?

使用准备好的语句的 PHP 注册脚本

bind_result 成数组 PHP mysqli 准备好的语句