0

al querer imprimir una parte del array salta un error de undefined index, en mi caso,tengo una función que trae de una db SQL unos datos (nombre, apellido, nombreUsuario), esta es la función:

function RecuperarUsuario($user){
include("db/conex.php");
$query = $db->prepare("SELECT nombre, apellido, nombreUsuario FROM usuarios WHERE nombreUsuario = '$user'");
$query->execute();
$row = $query->fetchAll(PDO::FETCH_ASSOC);
return $row;

}

Cuando voy a mi página de perfil del usuario, le asigno a mi variable $data el resultado de la función anterior. Dado que uso FETCH_ASSOC, los índices del array automáticamente se asignan como los nombres de la columna correspondiente a la db. Es decir $data['nombre'], $data['apellido'], etc. Al hacer var_dump en $data, me devuelve un array con esos mismos indices pero al querer llamarlo en un formulario para que se completen los datos, me sale el error

Notice: Undefined index: nombre in "numero de linea, etc.)...

Muchas gracias por la ayuda desde ahora!

PD: trabajo con PDO.

Capt.Teach
  • 1,129
  • 2
  • 12
  • 18
  • Estaría bien que nos enseñaras el código con el que intentas recuperar los datos. Es decir, que nos copies y pegues el código en donde tienes el error. – mrddr Feb 14 '20 at 08:39
  • fíjate en este hilo que puede te sirva: https://es.stackoverflow.com/questions/184341/diferencia-entre-fetch-y-fetchall-en-php – eugeniadipaolo Feb 14 '20 at 08:49

1 Answers1

0

fetchAll en tu caso va a meter todas las filas que traiga la consulta dentro de un array asociativo.

Entonces tendrás dos formas de leer los datos:

1. Directamente, usando los índices

En ese caso tienes que poner en primer lugar el índice

echo $data[0]['nombre'];
echo $data[0]['apellido'];

Aquí el 0 indicará la primera fila de resultados, el 1 la segunda fila, etc. porque como ya sabrás los arrays en PHP se indexan partiendo de 0.

2. Dentro de un bucle

Podrás mostrar todas las filas, leyendo el array que te creó fetchAll dentro de un bucle:

foreach ($data as $item) {
    echo $item['nombre']." ".$item['apellido'].PHP_EOL;
}

Si por ejemplo tu consulta trae una sola fila, es mejor que uses simplemente fetch, en vez de fetchAll, en cuyo caso puedes poner un LIMIT 1 al final de tu sentencia SQL y ahí sí podrás leer los datos así al usar fetch:

echo $data['nombre'];
echo $data['apellido'];

Par entender la diferencia entre fetch y fetchAll y cuando conviene usar uno u otro puedes consultar esta pregunta: Diferencia entre fetch y fetchall en PHP?.

Te recomendaría también que implementes consultas preparadas, pues tu código actual es altamente vulnerable a ataques de Inyección SQL. Es un grave riesgo de seguridad que puede permitir a un usuario mal intencionado tomar el control de tu servidor entrando incluso en el sistema de archivos por medio del manejador de base de datos.

A. Cedano
  • 86,578
  • 19
  • 122
  • 221