mysqli_query mysqli_num_rows mysqli_fetch_object mysqli_fetch_array mysqli_fetch_all fetch_array ejemplo assoc php mysql database arrays mysqli

mysqli_num_rows - PHP y MYSQLi-¿Vincula los parámetros usando loop y store in array?



mysqli_fetch_object (3)

Será más fácil explicarlo con el próximo código (está mal, por cierto):

$selectGenre_sql = ''SELECT genreID FROM genres WHERE dbGenre = ?''; if ($stmt->prepare($selectGenre_sql)) { // bind the query parameters $stmt->bind_param(''s'', $genre); // bind the results to variables $stmt->bind_result($genres); // execute the query $stmt->execute(); $genre = array(); while ($stmt->fetch()) { $genre[] = $genres; } }

El código anterior obtiene el valor de ''genreID'' cuando ''dbGenre'' es igual a ''$ género''. Y luego almacena los resultados en una matriz. Pero no está funcionando. ¿Por qué? Creo que porque ''$ genre'' es una matriz, por lo que necesito recorrerla para obtener un valor diferente de ''genreID'' cada vez.

$ género es una matriz enumerada que contiene géneros de películas, por ejemplo:

[0] => Acción [1] => Aventura [2] => Fantasía

Necesito comparar el valor (como ''Acción'', por ejemplo)

La tabla ''géneros'' contiene dos columnas: genreID (INT) y dbGenre (VARCHAR)

Solo necesito cada genreID (que es un número) ... Digamos que ... cuando dbGenre es igual a Action, entonces almacena el genreID en una matriz1, y luego repite la matriz $ genre para obtener la genreID para el siguiente valor y almacenarlo de nuevo en array1

¿¿Cómo puedo arreglarlo?? Soy nuevo en la programación así que sea lo más detallado posible. ¡¡Gracias!!


No puede vincular una matriz a un parámetro de SQL. Puede usar un parámetro en SQL en lugar de un único valor literal . No es una lista de valores, o una expresión, o un nombre de columna o tabla.

Para resolver la tarea en su caso, puede usar cualquiera de las dos soluciones:

Primera solución: iterar en $genre matriz de $genre , vincular cada valor de uno en uno y ejecutar la consulta SQL para cada valor.

if ($stmt->prepare($selectGenre_sql)) { $genre = array(); foreach ($gengre as $genreID) { $stmt->bind_param(''s'', $genreID); $stmt->execute(); $stmt->bind_result($genres); while ($stmt->fetch()) { $genre[] = $genres; } } }

Segunda solución: ejecutar la consulta una vez, con múltiples parámetros, uno para cada valor en la matriz. Esto requiere un código complicado para construir un número variable de ? marcadores de posición en la consulta SQL, separados por comas.

$selectGenre_sql = ''SELECT genreID FROM genres WHERE dbGenre IN ('' . join('','', array_fill(0, count($genre), ''?'')) . '')''; if ($stmt->prepare($selectGenre_sql)) { $genre = array(); . . .

También necesita obtener llamadas difíciles bind_param() con una cantidad variable de argumentos basados ​​en los elementos de su matriz de $genre :

. . . call_user_func_array( array($stmt, ''bind_param''), array_unshift($genre, str_repeat(''i'', count($genre))); $stmt->execute(); $stmt->bind_result($genres); while ($stmt->fetch()) { $genre[] = $genres; } }

Es posible que desee considerar el uso de PDO::mysql porque es más fácil vincular parámetros de una matriz. La interfaz MySQLi es bastante incómoda para este caso.


Unas pocas cosas.

  • ¿Podría ser porque no sobrescribes el $ género var, intenta cambiarlo a $ genreArray en el caso sedond?
  • Asegúrate de que la base de datos realmente está devolviendo cosas (pruébalo en phpMyAdmin o algo similar)

  • Intenta procesar así:

.

$genreId = -1; $stmt->bind_results($genreId); $stmt->execute(); while($stmt->fetch()){ $genreArray[] = $genreId; }


@ Bill Karwin

call_user_func_array no pasará los argumentos por referencia, ¡pasará los valores por lo que no funcionará! le dará error stmt-> bind_param

pdo no es una solución mejor ... todavía tienes que hacer una solución para eso también

esto debe ser editado en tu publicación:

if($stmt = ...same as yours) { array_unshift($genre, str_repeat(''i'', count($genre))); $temp = array(); foreach($genre as $key => $value) { $temp[$key] = &$genre[$key]; } call_user_func_array(array($stmt, ''bind_param''), $temp); etc... }