problema php con query

MnkB

hola mv,

Creo que esta bien colocado el hilo y a ver si me podeis ayudar :)
Os traigo un problema que no se como solucionar, he probado con varios tipos de bucles distintos y el mismo resultado, solo imprime la primera posición del array, el resto nada.

El código es este;

foreach ($array as $value){
	$sql="select * from asientos where idAsiento='$value'";
	$resulset = $mysqli->query($sql);
	while ($row=mysqli_fetch_array($resulset)){
		echo "Butaca en :";
		echo "Fila: ".$row['fila']." ";
		echo "Asiento: ".$row['asiento'];
	}
}

Simplemente es esto y si pongo un echo para ver que imprima los elementos se ven todos values pero solo imprime el primero. Debe ser algún problema de la query.. pero ni idea ¿Alguna sugerencia? gracias de antemano.

KaLaTa

Por mi interpretación de tu problema:

Haciendo

select * from asientos where idAsiento='$value'

realmente solo estás cogiendo el asiento que tenga el identificador que le pasas como valor.

Si quieres listar en el while todos los asientos de tu tabla asientos deberías hacer:

select * from asientos

y entonces iteras sobre el bucle tal y como estás haciendo.

#3 quieres decir que idAsiento no es un identificador individual sino del grupo de asientos que quieres mostrar?

Si no existen dos entradas en tu tabla con el mismo idAsiento se hace como te he dicho.

Si por el contrario existen varias entradas con el mismo idAsiento idéntico que además son las que quieres mostrar, se haría de tu manera.

#4 ignora mi contestación de antes, no me había fijado en el foreach. Me temo que no encuentro el fallo, tal y como lo veo debería funcionar bien.

1 2 respuestas
MnkB

#2 Solo querría listar la info de los elementos que hay en el array, de esos "idAsiento" concretos.

Y el caso es que así solo consigo que me imprima la fila y asiento del 1er elemento. :(

1 respuesta
MnkB

#2 a ver, me explico otra vez.

$array tiene varios idAsiento que se han seleccionado por el cliente anteriormente. También es una clave primaria de la tabla Asiento.

Al recorrerlo, se lo paso a la query para que obtenga la info concreta de ese asiento, pero solo consigo que imprima el 1º, del resto pasa.

Gracias por tu tiempo

1 respuesta
elkaoD

Si el asiento es una clave primaria, ¿cómo esperas que te devuelva más de un valor? ¿O es el foreach el que no funciona? Si es por el foreach, ¿qué contiene $array antes del bucle? ¿Qué imprime $value en las iteraciones del bucle?

Aún así, yo lo haría todo en una consulta: WHERE idAsiento IN ($valor1, $valor2...)

2 respuestas
MnkB

#5 $array es tal que asi [12,18,19].. siendo estos idAsiento, pero pudiendo variar..

Así recojo en la query la info de cada asiento. la fila en donde esta y la columna.

$value lo hace bien ya que me devuelve uno a uno los elementos del array, pero la query solo lo hace del primero siempre

Voy a probar con la query que me dices, gracias!

Thanat0s

Ese Monkey joder :)

El código que has puesto no tiene pinta de estar mal (si acaso podrías quitar el while ya que idAsiento es clave primaria y sólo vas a obtener 1 fila en cada iteración del foreach), así que yo me centraría en comprobar que los datos están correctos en la base de datos.

pd: yo probaría a lanzar una select en phpmyadmin tal que así:
select * from asientos where idAsiento='18'
A ver que te devuelve eso.

1 respuesta
eXtreM3

Estás seguro también de que $value recoge todos los elementos?

T

Comprueba que se realice correfctamente el foreach y comprueba los valores de $value a cada iteración. Sino como dice #5 agruparía todas las consultas en una sola para así evitar aceder tanto a la BBDD y recoger los resultados de una sola tacada.

MnkB

#7 ese thani ostias! jaja :D

gracias a todos por las respuestas
ya creo saber de donde viene el problema. El caso es que el array se recibe mal al pasarlo de javascript a php. Algo tal que así:

$array=([12,18],[]);

Es decir, todo se mete en el primer elemento, por eso imprimia bien los valores pero no se pasaban bien a la query.

gracias de nuevo por la ayuda

Usuarios habituales