PHP - PDO::FETCH_ASSOC

   
Vista:

PDO::FETCH_ASSOC

Publicado por leoalvis (10 intervenciones) el 23/06/2016 15:30:04
uenos días Amigos:

Tengo un problema en presentar los resultados de una busqueda mediante PDO::FETCH_ASSOC, ya que el registro que se envía al buscar lo repite en en el resultado infinidad de veces y quiero que salga solo una vez. Le he realizado todos los ajustes pero mi lógica ya no me da mas... Cualquier ayuda lo agradecería muchas gracias.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
='editor_indent'>$articulo=$_POST["nombre"];
$pais=$_POST["pais"];
 
try{
='editor_indent'>$conexion=new PDO("mysql:host=localhost;dbname=pruebas;charset=u tf8","root","");
$conexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEP TION);
$sql="SELECT NOMBREARTÍCULO,SECCIÓN,PRECIO,PAÍSDEORIGEN FROM PRODUCTOS WHERE NOMBREARTÍCULO=:nart AND PAÍSDEORIGEN=:paorigen";
$resultado=$conexion->prepare($sql);
$resultado->execute(array(":nart"=>$articulo,":paorigen"=>$pa is));
 
$fila=$resultado->fetch(PDO::FETCH_ASSOC);
 
if($articulo==$fila['NOMBREARTÍCULO'] && $pais==$fila['PAÍSDEORIGEN']){
='editor_indent'>while($fila){
='editor_indent'>echo "Nombre Artículo: ".$fila['NOMBREARTÍCULO']." Sección: ".$fila['SECCIÓN'].
" Precio ".$fila['PRECIO']." País de Origen ".$fila['PAÍSDEORIGEN']."<br>";
}
}else{
='editor_indent'>echo "Articulo no existe";
}
 
$resultado->closeCursor();
}catch(Exception $e){
='editor_indent'>echo "Error en conexión ".$e->GetMessage();
}finally{
='editor_indent'>$conexion=null;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de PHP
- Código fuente de PHP
- Cursos de PHP
- Temas de PHP
- Chat de PHP
información
Códigos de PHP
- Albums de fotos
- Paginación
- Eliminar un valor de un array

PDO::FETCH_ASSOC

Publicado por Yamil (532 intervenciones) el 23/06/2016 15:37:10
Pero en el while no vuleves a leer la siguiente fila...
Tendrias que escribir algo como

while($fila= $resultado->fetch( PDO::FETCH_ASSOC )){
...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PDO::FETCH_ASSOC

Publicado por leoalvis (10 intervenciones) el 23/06/2016 15:42:12
Si lo hice pero cuando hago la modificación y enviío los datos la pagina me queda en blanco
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

PDO::FETCH_ASSOC

Publicado por kip (560 intervenciones) el 23/06/2016 21:16:10
Hola, al usar el bucle while sin dar un parametro especifico, te arrojara resultados infinitas veces ya que al final del bucle verificara el parametro que colocaste, en este caso como solo colocaste una verificacion de variable, pues logicamente el bucle seguira ejecutandose.

Ademas, si en la query estas usando la clausula WHERE para solo traer aquellos que coincidan con los datos que proporcionas, por que hacerlo de nuevo ?

Hazlo asi:

1
2
3
4
while($fila=$resultado->fetch(PDO::FETCH_ASSOC)) {
echo "Nombre Artículo: ".$fila['NOMBREARTÍCULO']." Sección: ".$fila['SECCIÓN'].
" Precio ".$fila['PRECIO']." País de Origen ".$fila['PAÍSDEORIGEN']."<br>";
}


Nos cuentas como te fue.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

PDO::FETCH_ASSOC

Publicado por leoalvis (10 intervenciones) el 24/06/2016 00:07:11
Gracias por la ayuda... Según mi lógica debería tener 2 veces cargado el arreglo que devuelve fetch() en primer lugar para validar que sino coinciden los datos enviados por el form arroje el resultado "Artículo no existe", en caso de existir cargo nuevamente el el arreglo de fetch() para que el ciclo me muestre el numero de veces que aparece el articulo en la base de datos 2 veces, 3 veces etc. kip agregué la modificación tal cual como me la sugeriste pero extrañamente al enviar los datos la pagina de respuesta aparece en blanco. Sin embargo, si le envío datos inexistententes de la BD si me aparece el mensaje "Artículo no existe" es decir valida de forma correcta los datos inexistentes. Adjunto el codigo con la modificación sugerida:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
 
$articulo=$_POST["nombre"];
$pais=$_POST["pais"];
 
try{
	$conexion=new PDO("mysql:host=localhost;dbname=pruebas;charset=utf8","root","");
	$conexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
	$sql="SELECT NOMBREARTÍCULO,SECCIÓN,PRECIO,PAÍSDEORIGEN FROM PRODUCTOS WHERE NOMBREARTÍCULO=:nart AND PAÍSDEORIGEN=:paorigen";
	$resultado=$conexion->prepare($sql);
	$resultado->execute(array(":nart"=>$articulo,":paorigen"=>$pais));
 
	$fila=$resultado->fetch(PDO::FETCH_ASSOC);
 
	if($articulo==$fila['NOMBREARTÍCULO'] && $pais==$fila['PAÍSDEORIGEN']){
		while($fila=$resultado->fetch(PDO::FETCH_ASSOC)){
				echo "Nombre Artículo: ".$fila['NOMBREARTÍCULO']." Sección: ".$fila['SECCIÓN'].
				" Precio ".$fila['PRECIO']." País de Origen ".$fila['PAÍSDEORIGEN']."<br>";
		}
	}else{
		echo "Articulo no existe";
	}
 
			$resultado->closeCursor();
}catch(Exception $e){
	echo "Error en conexión ".$e->GetMessage();
}finally{
	$conexion=null;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

PDO::FETCH_ASSOC

Publicado por kip (560 intervenciones) el 24/06/2016 03:22:19
Lo que puede originar el problema es tal vez que los nombres de los campos tienen tildes o acentos, prueba modificandolos, cambialos a un nombre sin acentos y que no este en mayusculas preferiblemente.

De cualquier forma, antes de hacer lo de arriba, trata de usar un while y en cada repeticion del bucle verificar si coinciden los datos con las filas que deseas:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$articulo=$_POST["nombre"];
$pais=$_POST["pais"];
 
try{
 
    $conexion=new PDO("mysql:host=localhost;dbname=pruebas;charset=utf8","root","");
    $conexion->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    $sql="SELECT NOMBREARTÍCULO,SECCIÓN,PRECIO,PAÍSDEORIGEN FROM PRODUCTOS WHERE NOMBREARTÍCULO=:nart AND PAÍSDEORIGEN=:paorigen";
    $resultado=$conexion->prepare($sql);
    $resultado->execute(array(":nart"=>$articulo,":paorigen"=>$pais));
 
    while($fila=$resultado->fetch(PDO::FETCH_ASSOC)){
        if($articulo==$fila['NOMBREARTÍCULO'] && $pais==$fila['PAÍSDEORIGEN']){
 
            echo "Nombre Artículo: ".$fila['NOMBREARTÍCULO']." Sección: ".$fila['SECCIÓN'].
                " Precio ".$fila['PRECIO']." País de Origen ".$fila['PAÍSDEORIGEN']."<br>";
 
        }else{
            echo "Articulo no existe";
        }
    }
 
    $resultado->closeCursor();
}catch(Exception $e){
    echo "Error en conexión ".$e->GetMessage();
}finally{
    $conexion=null;
}

Intentalo y nos cuentas

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

PDO::FETCH_ASSOC

Publicado por leoalvis (10 intervenciones) el 24/06/2016 12:20:06
Kip excelente funcionó. No tuve problemas con los acentos. El problema era el orden de las sentencias como lo propusiste. Me sirvió para mejorar mi lógica, eres Neo el elegido jejejeje. muchas gracias te debo una.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip

PDO::FETCH_ASSOC

Publicado por kip (560 intervenciones) el 24/06/2016 15:05:44
Lo de los acentos era un consejo, siempre es mejor usar nombres sencillos pero descriptivos para cada campo de una tabla, tenlo en cuenta.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar