2014-10-31 11 views
5

Con il vecchio mysql_ sintassi ero in grado di fare qualcosa del genere:Estrazione elemento n-esimo di un risultato della query mysqli

$query=mysql_query('select id from rank'); 
for ($i=0; $i<$max; $i++) { 
$id0[$i] = mysql_result($query, $i, "id"); 
$id1[$i] = mysql_result($query, $i+1, "id"); 
$id2[$i] = mysql_result($query, $i+2, "id"); } 

sto trovando molte difficoltà nel raggiungere lo stesso risultato con mysqli; di solito recupero i dati di una query mysqli utilizzando la funzione mysqli_fetch_assoc($query) per estrarre in modo ricorsivo riga per riga tutti i record nel risultato della query.

Come posso ottenere il risultato che mi serve, cioè estrarre ad ogni ciclo della funzione ricorsiva l'ennesimo, l'ennesimo + 1, l'ennesimo + 2 elemento del risultato della ricerca? E come posso fare riferimento all'ennesimo elemento del campo molto id? Mi sembra impossibile lavorare con una riga del risultato della query alla volta ...

Scusami se questa domanda sembra essere sciocca, ma sto procedendo alla conversione di un vecchio sito realizzato con la sintassi mysql_ in mysqli_ e sto incontrando molte difficoltà, anche se provo a fare riferimento alla documentazione PHP.net (e, naturalmente, per Stack Overflow conoscenze ...) ...

EDIT (PROBLEMA RISOLTO): I' Ho risolto il mio problema seguendo i suggerimenti di Jeroen: non essendo disponibile la funzione fetch_all, ho creato un array che memorizzava ciascuna riga del risultato della query msqli attraverso un ciclo:

while ($row=mysqli_fetch_assoc($query)) 
    $table[]=$row; 

operativo in questo modo è molto più facile che punta a ogni record della tabella utilizzando i soliti indici:

for ($i=0; $i<$max; $i++) { 
    $id0[$i]=$table[$i]["id"]; 
    $id1[$i]=$table[$i+1]["id"]; 
    $id2[$i]=$table[$i+2]["id"]; } 
+0

Se si sta convertendo il sito in ogni caso, vorrei suggerire utilizzando la classe DOP. http://us3.php.net/manual/en/class.pdo.php – JakeParis

+4

@JakeParis: Solo fyi sta cercando una soluzione mysqli_. Ha appena detto che stava usando il mysql_ prima, ma vuole ottenere la stessa cosa in mysqli. –

+0

@TiborB., Vedi http://us3.php.net/manual/en/function.mysqli-fetch.php – JakeParis

risposta

3

È possibile utilizzare mysqli_data_seek() per impostare il puntatore al risultato ad una riga arbitraria nel vostro set di risultati.

Quindi il codice sarebbe simile:

for ($i=0; $i<$max; $i++) { 
    mysqli_data_seek($result, $i); 
    // depending on your php version you might need a temporary variable to 
    // get the ID 
    $id0[$i] = mysqli_fetch_assoc($result)['id']; 
    ... 
} 
+1

Sto provando questo tipo di approccio, penso che questo sia il modo giusto di procedere (o, almeno, quello che può risolvere il mio problema) – Hunter

+0

@Hunter Fa ciò che fa la tua vecchia soluzione. Tuttavia, se lo fai molto - '$ max' è grande - potrebbe essere più efficiente ottenere tutte le righe dalla query in un array in una volta sola e ottenere i risultati nel tuo ciclo da quella matrice. – jeroen

+0

cosa intendi con "in una volta sola"? Usando un loop e memorizzando ogni riga recuperata 'mysqli_fetch_assoc' in un array ... o usando una funzione appropriata per ottenere tutti i dati (veramente) in una volta sola? La funzione 'fetch_all()' a cui ti stai riferendo? Ah, sembra che la mia versione PHP sia 5.3.1 (non so cosa intendessero con quel "extra" ;-)), quindi mi chiedo perché ottengo quell'errore con 'fetch_all'. – Hunter

Problemi correlati