Utilice & # 8220; mysql_fetch_row & # 8221; recuperar resultados de la base de datos e insertarlos en una matriz usando PHP y mysqli?
Pregunta
Necesito recuperar datos de varias filas y luego insertar los resultados en una matriz enumerada para poder usar un " para " bucle para hacer eco ...
Tengo esto (ya me conecté a la base de datos):
$genres_sql = 'SELECT genreID FROM genres WHERE imdbID = ?';
if ($stmt->prepare($genres_sql)) {
// bind the query parameters
$stmt->bind_param('i', $movieid);
// bind the results to variables
$stmt->bind_result($genre);
// execute the query
$stmt->execute();
$stmt->fetch();
}
Aquí obtengo el primer resultado (fila) en una variable. Pero necesito insertarlo en una matriz enumerada para poder hacer eco de cada resultado usando esto:
if (!empty($genre)) {
for ($i = 0; $i + 1 < count($genre); $i++)
{
echo $genre[$i].', ';
}
echo $genre[$i];
}
Esto hará eco: $ genere [0], $ genere [1], $ genere [2],
y así sucesivamente hasta el último.
Sé que mysql_fetch_row
puede hacer el trabajo, pero soy nuevo en programación así que necesito una explicación muy detallada.
¡Gracias!
Solución
Puede realizar un bucle utilizando el método MySQLi_Statement :: fetch
:
$stmt->bind_result($genre);
$stmt->execute();
$genres = array();
while ($stmt->fetch()) {
$genres[] = $genre;
}
Básicamente, fetch
proporciona un iterador que while
puede usar para iterar a través de cada resultado. Las variables en bind_result
(en este caso $ genere
) se reasignan con cada iteración.
Otros consejos
No estoy 100% familiarizado con mysqli, pero he jugado con muchos comandos pgsql haciendo este tipo de cosas y creo que lo que estás buscando es mysqli-result- > fetch_assoc . Esto producirá una matriz asociativa que puede recorrer con bastante facilidad de esta manera:
while ($row = $result->fetch_assoc()) {
printf ($row["genre"]);
}
EDITAR: Alnitak se ha vinculado a una mejor explicación que la que tengo en los comentarios para esto respuesta.
Esta no es realmente una respuesta a la pregunta, pero si desea imprimir una matriz como una lista separada por comas, es mejor usar comando implode que un bucle for:
//Replaces the for loop in the question
echo implode(', ', $genre);
... excepto que no hay coma después del último elemento.
Solo para completar la respuesta de @Mykroft, si realmente solo desea una matriz enumerada, simplemente use $ result- > fetch_array (MYSQLI_NUM), aunque una matriz asociativa es mucho más fácil de usar en la mayoría de las situaciones.