2013-02-22 13 views
10

Próbuję użyć mysqli do przygotowania instrukcji, aby bezpiecznie przekazać wartości zmiennych do zapytania. Wszystko to działa dla mnie, ale problemem, na który napotykam, jest uzyskanie wyniku w tablicy asocjacyjnej. Oto moja konstrukcja tej pory:PHP mysqli - zwraca tablicę asocjacyjną z przygotowanej instrukcji

$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"); 
} 

Jak widać, mam wiele kolumn uzyskiwanie przekazywane z powrotem więc chciałbym nie muszą wiązać je do każdej zmiennej.

Ponadto celem końcowym jest przekazanie tablicy asocjacyjnej zakodowanej przez json do reszty mojej aplikacji.

Znalazłem problem w dokumentacji php i na wymianie stosu i znalazłem sugestie, ale nie mogę ich zmusić do działania. Czy ktoś mógłby pomóc?

Odpowiedz

16

Jeśli masz Native rozszerzenie sterownika MySQL (mysqlnd), można użyć metody get_result aby uzyskać ResultSet, a następnie pobrać z niej zwykły sposób:

$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

niesamowite, że pracował i zwrócony asocjacyjną array, ale zwraca tylko pierwszy wiersz zapytania. Czy muszę umieścić go w pętli foreach, aby wyciągnąć pozostałe wiersze i wstawić je do nowej tablicy? –

+2

@ChrisSchmitz tak, wystarczy pętla 'while while ($ row = $ result-> fetch_array (MYSQLI_ASSOC)) {var_dump ($ row); }; ' –

+4

Ta opcja jest dostępna tylko dla mysqlnd – greg

Powiązane problemy