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)?必要的?