Resumiendo un poco todo lo que yo y otros usuarios te hemos venido señalando sobre este código, una posible solución sería la siguiente.
He puesto comentarios en varios puntos para que se entienda toda la evolución del problema:
/*
Recogemos el valor del GET usando un ternario
*/
$user = !empty($_GET['usuario']) ? $_GET['usuario'] : NULL;
/*
Verificamos si hay datos pasados en GET
*/
if($user) {
require ('conexion.php');
$conn = Conectar();
/*
Como comenta quevedo, debes usar $conn
Y, ad libitum voy a cambiar tu larrrrga variable por $stmt
que es lo que se suele usar para estos casos...
quizá nombres tannnn descriptivos no tienen mucho sentido aquí
y sólo contribuyen a hacer un código más extenso
pero eso queda a tu gusto
*/
$stmt = $conn->prepare("SELECT usuario, password
FROM usuarios
WHERE usuario = :usuario");
/*
Aquí podría verificarse el resultado de prepare
y más adelante el de execute o usar un bloque try ... catch
para escribir un código robusto pero dado que esto se alejaría
del problema original, lo dejamos tal y como lo tienes.
Pero no te recomiendo programar de una forma tan "optimista"
deberías pensar en todo lo que puede salir mal para afrontarlo desde el código,
es lo que yo llamo programación "pesimista"
*/
/*
Hay un comentario de quevedo invitando a usar execute para pasar los parámetros,
Esto es válido y simplifica el código, pero no siempre es lo mejor,
porque cuando haces eso, todos los parámetros son reconocidos como String
obligando a reconversiones de aquellos parámetros que sean int, boolean, etc.
Lo más claro es usar bindParam o bindValue e incluso especificar de forma explícita
de qué tipo es cada dato, así evitamos sorpresas desagradables y escribimos código específico
Al final te dejaré algún enlace con argumentos sólidos al respecto
*/
$stmt->bindParam(":usuario", $user,PDO::PARAM_STR);
$stmt->execute();
/*
Uno de los graves errores iniciales era no guardar una referencia del fetch
(originalmente era fetchColumn), pero de cualquier fetch... debes guardar referencia
de algún modo, pues lo que devuelve PDO no son los datos en sí mismos, sino algo así como
un puntero hacia los datos el cual debes recorrer /leer con alguno de los métodos fetch
fetchAll es una opción recomendada cuando se esperan pocos datos
Sin embargo cuando se esperan muchos datos ("muchos" depende de "muchas cosas,
como capacidad del servidor, velocidad de red, etc)... cuando se esperan "muchos" datos
fetchAll no se recomienda, porque podría haber problemas de desbordamiento de memoria
en ese caso es mejor usar fetch simplemente y leer los resultados dentro de un bucle
Sobre ese estilo de lecturas encontrarás ejemplos en el Manual de PHP y en varias
respuestas de este mismo sitio ...
Dado que aquí es una consulta filtrada, podrías usar fetchAll() porque es poco probable
que arroje una cantidad ingente de datos
*/
$arrDatos=$stmt->fetchAll(PDO::FETCH_ASSOC);
/*
Aquí podemos verificar a los datos mismos
para saber si la consulta vino vacía o no
*/
if($arrDatos){
foreach ($arrDatos as $muestra) {
/*
Usa print_r para mostrar arrays en fase de depuración, aunque es mejor usar var_dump
Para mostrar datos finales, lo más simple es usar echo
Aquí simplificamos, poniendo todo en una sola cadena rodeada de comillas dobles
En ese caso es lícito poner los nombres de clave del array sin nignuna comilla
\t es una tabulación y PHP_EOL indica un salto de línea.
*/
echo "$muestra[usuario] \t $muestra[password]".PHP_EOL;
}
} else {
echo "No hay datos";
}
} else {
echo "No se pasaron datos desde el cliente";
}
Enlaces