2013-02-22 13 views
10

Sto tentando di utilizzare mysqli per preparare un'istruzione per passare in sicurezza i valori delle variabili alla query. Tutto ciò funziona per me, ma il problema che sto incontrando è ottenere il risultato in un array associativo. Ecco la mia struttura finora:PHP mysqli - restituisce un array associativo da un'istruzione preparata

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

Come potete vedere, ho un sacco di colonne ottenere ripassato quindi mi piacerebbe non dover loro ogni legarsi a una variabile.

Inoltre, l'obiettivo finale è quello di restituire un array associativo codificato JSON al resto della mia applicazione.

Ho esaminato il problema nella documentazione php e nello scambio di stack e ho trovato suggerimenti, ma non riesco a farli funzionare. Qualcuno potrebbe dare una mano ??

risposta

16

Se avete la Native estensione driver MySQL (mysqlnd), è possibile utilizzare il metodo get_result per ottenere un ResultSet, e poi prendere da esso il solito modo:

$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

impressionante, che ha funzionato e ha restituito un associativa array, ma restituisce solo la prima riga della query. Avrei bisogno di metterlo in un ciclo foreach per tirare fuori il resto delle righe e inserirle in un nuovo array ?? –

+2

@ChrisSchmitz si, solo loop 'while ($ row = $ result-> fetch_array (MYSQLI_ASSOC)) {var_dump ($ row); }; ' –

+4

Questo è disponibile solo con mysqlnd – greg

Problemi correlati