db = Database::getConnection(); // Guardamos el objeto PDO en $db } // BUSCAR USUARIO public function buscarPorUsuario($usuario) { $sql = "SELECT * FROM usuarios WHERE (usuario = :usuario) AND (usuarios.activo = true) LIMIT 1"; // LIMIT 1, más que nada por seguridad u optimizacón. :usuario es reemplazado luego con el valor real $stmt = $this->db->prepare($sql); // Uso de prepare para evitar SQL Injection $stmt->bindParam(':usuario', $usuario, PDO::PARAM_STR); // Asocia la variable $usuario con el placeholder :usuario en la consulta. $stmt->execute(); // Ejecuta la consulta ya preparada con los parámetros vinculados return $stmt->fetch(PDO::FETCH_ASSOC); // Obtiene la primera fila del resultado como un array asociativo } // INVALIDAR POR USUARIO public function invalidarPorUsuario(int $id): bool { $sql = "UPDATE recuperacion_cuenta SET usado = 1 WHERE (id_usuario = :id_usuario)"; $stmt = $this->db->prepare($sql); return $stmt->execute([':id_usuario' => $id]); } // CREAR RECUPERACIÓN public function crear(array $data): bool { $sql = "INSERT INTO recuperacion_cuenta (id_usuario, codigo, expira_a, usado) VALUES (:id_usuario, :codigo, :expira_a, 0)"; $stmt = $this->db->prepare($sql); return $stmt->execute([ ':id_usuario' => $data['id_usuario'], ':codigo' => $data['codigo'], ':expira_a' => $data['expira_a'] ]); } // OBTENER ÚLTIMO CÓDIGO VÁLIDO public function obtenerCodigoValido(int $idUsuario): ?array { $sql = "SELECT id, codigo, expira_a, usado FROM recuperacion_cuenta WHERE (id_usuario = :id_usuario) AND (usado = 0) ORDER BY id DESC LIMIT 1"; $stmt = $this->db->prepare($sql); $stmt->execute([':id_usuario' => $idUsuario]); return $stmt->fetch(PDO::FETCH_ASSOC) ?: null; } // MARCAR COMO USADO public function marcarComoUsado(int $id): bool { $sql = "UPDATE recuperacion_cuenta SET usado = 1 WHERE id = :id"; $stmt = $this->db->prepare($sql); return $stmt->execute([':id' => $id]); } }