2013-02-22 125 views
10

我试图使用mysqli编写语句以安全地将变量值传递给查询。所有这一切都为我工作,但我遇到的问题是在一个关联数组中获取结果。 这里是我的结构至今:PHP 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文档和堆栈交换中查找了这个问题,并且我找到了一些建议,但我似乎无法让它们工作。任何人都可以伸出援手吗?

回答

16

如果你有MySQL的本机驱动程序的扩展名(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 :) 
+1

真棒,那工作并返回一个关联数组,但它只返回查询的第一行。我是否需要将它放到foreach循环中,将剩余的行拖出并插入到新的数组中? – 2013-02-22 19:58:41

+2

@ChrisSchmitz是的,只是循环'while($ row = $ result-> fetch_array(MYSQLI_ASSOC)){var_dump($ row); };' – 2013-02-22 23:49:01

+4

这只适用于mysqlnd – greg 2015-03-10 04:17:03

相关问题