idPregunta = $idPregunta; $this->idCategoria = $idCategoria; $this->nombrePregunta = $nombrePregunta; $this->respuestas = []; } public function getIdPregunta(): ?int { return $this->idPregunta; } public function getIdCategoria(): int { return $this->idCategoria; } public function setIdCategoria(int $idCategoria): void { $this->idCategoria = $idCategoria; } public function getNombrePregunta(): string { return $this->nombrePregunta; } public function setNombrePregunta(string $nombrePregunta): void { $this->nombrePregunta = $nombrePregunta; } public function getRespuestas(): array { return $this->respuestas; } public function guardar() { $conexion = conexionBD(); if (is_array($conexion)) { return $conexion; } try { $sql = "INSERT INTO pregunta (idCategoria, nombrePregunta) VALUES (:idCat, :texto)"; $stmt = $conexion->prepare($sql); $stmt->execute([ ':idCat' => $this->idCategoria, ':texto' => $this->nombrePregunta ]); $this->idPregunta = (int)$conexion->lastInsertId(); return [ 'exito' => 'Pregunta guardada correctamente', 'exito_tecnico' => $this->idPregunta ]; } catch (PDOException $error) { return [ 'error' => 'Ocurrió un error al guardar la pregunta.', 'error_tecnico' => $error->getMessage() ]; } } public function cargarRespuestas() { if ($this->idPregunta === null) return; $conexion = conexionBD(); if (is_array($conexion)) { return $conexion; } try { $sql = "SELECT idRespuesta, nombreRespuesta, correcta FROM respuesta WHERE idPregunta = :idPreg"; $stmt = $conexion->prepare($sql); $stmt->execute([':idPreg' => $this->idPregunta]); $this->respuestas = $stmt->fetchAll(PDO::FETCH_ASSOC); } catch (PDOException $error) { return [ 'error' => 'Ocurrió un error al cargar las respuestas.', 'error_tecnico' => $error->getMessage() ]; } } public static function obtenerPorCategoria(int $idCategoria, int $limite = 10) { $conexion = conexionBD(); if (is_array($conexion)) { return $conexion; } try { $sql = "SELECT * FROM pregunta WHERE idCategoria = :idCat ORDER BY RAND() LIMIT :limite"; $stmt = $conexion->prepare($sql); $stmt->bindValue(':idCat', $idCategoria, PDO::PARAM_INT); $stmt->bindValue(':limite', $limite, PDO::PARAM_INT); $stmt->execute(); $preguntas = []; while ($datos = $stmt->fetch(PDO::FETCH_ASSOC)) { $preg = new Pregunta((int)$datos['idCategoria'], $datos['nombrePregunta'], (int)$datos['idPregunta']); $preg->cargarRespuestas(); $preguntas[] = $preg; } return $preguntas; } catch (PDOException $error) { return [ 'error' => 'Ocurrió un error al obtener las preguntas aleatorias.', 'error_tecnico' => $error->getMessage() ]; } } public static function getTodosIds()//devuelve solamente los id de todas las preguntas { $conexion = conexionBD(); if (is_array($conexion)) { return $conexion; } try { $consulta = $conexion->prepare("SELECT idPregunta FROM pregunta"); $consulta->execute(); return $consulta->fetchAll(PDO::FETCH_COLUMN); } catch (PDOException $error) { return [ "error" => "Ocurrió un error al obtener el listado.", 'error_tecnico' => $error->getMessage() ]; } } }