<?php
 
//--------------------------------------------------------------
// Fichero:  basedato.php
// Objetivo: Manejo de bases de datos
// Fecha:    D.11.12.2016
// Autor:    Pedro Reina <pedro@pedroreina.net>
// Licencia: CC0 1.0 Universal
//           http://creativecommons.org/publicdomain/zero/1.0/
//--------------------------------------------------------------
 
//----------------------------
// Variables globales
//----------------------------
 
$FicheroBaseDato = "encuesta.db";
 
//----------------------------
// Funciones que ofrecemos
//----------------------------
 
// Devuelve un único valor consultado a la base de datos
function BD_ConsultaValor ($Consulta)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Ejecutamos la consulta
  $Resultado = $Conexion->query ($Consulta);
 
  // Nos quedamos el resultado
  $Respuesta = $Resultado->fetchColumn();
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el resultado
  return $Respuesta;
  }
 
//--------------------------------------------------------------
// Devuelve un único registro consultado a la base de datos
function BD_ConsultaRegistro ($Consulta)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Ejecutamos la consulta
  $Resultado = $Conexion->query ($Consulta);
 
  // Nos quedamos con el primer registro
  $Respuesta = $Resultado->fetch();
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el resultado
  return $Respuesta;
  }
 
//--------------------------------------------------------------
// Devuelve una lista de registros consultados a la base de datos
function BD_ConsultaListaRegistro ($Consulta)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Obtenemos el resultado  de la consulta
  $Resultado = $Conexion->query ($Consulta);
 
  // Nos quedamos con todos los registros
  $Respuesta = $Resultado->fetchAll();
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos la lista de registros
  return $Respuesta;
  }
 
//--------------------------------------------------------------
// Devuelve una lista de cadenas de texto como resultado de una consulta
function BD_ConsultaListaTexto ($Consulta)
  {
  // La lista que responderemos
  $Lista = array();
 
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Vamos leyendo cada registro y añadiéndolo a la lista
  foreach ( $Conexion->query ($Consulta) as $Registro )
    { array_push ($Lista, $Registro[0]); }
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el resultado
  return $Lista;
  }
 
//--------------------------------------------------------------
// Ejecuta una consulta y devuelve un texto de error
function BD_EjecutaConsulta ($Consulta)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Ejecutamos la consulta
  $Resultado = $Conexion->query ($Consulta);
 
  // Vemos si hay error
  $Error = $Conexion->errorInfo();
 
  // La respuesta depende del error
  if ( $Error[0] )
    { $Respuesta = $Error[2]; }
  else
    { $Respuesta = ""; }
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el error
  return $Respuesta;
  }
 
//--------------------------------------------------------------
// Ejecuta una consulta sobre una lista de cadenas
// y devuelve un texto de error
function BD_EjecutaConsultaListaTexto ($Consulta, $Lista)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Preparamos la consulta
  $Sentencia = $Conexion->prepare ($Consulta);
 
  // Ejecutamos la consulta en cada cadena
  foreach ( $Lista as $Texto )
    { $Sentencia->execute (array($Texto)); }
 
  // Vemos si hay error
  $Error = $Conexion->errorInfo();
 
  // La respuesta depende del error
  if ( $Error[0] )
    { $Respuesta = $Error[2]; }
  else
    { $Respuesta = ""; }
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el error
  return $Respuesta;
  }
 
//--------------------------------------------------------------
// Ejecuta una consulta sobre una lista de parámetros
// y devuelve un texto de error
function BD_EjecutaConsultaLista ($Consulta, $Lista)
  {
  // Abrimos una conexión a la base de datos
  $Conexion = BD_Conexion();
 
  // Preparamos la consulta
  $Sentencia = $Conexion->prepare ($Consulta);
 
  // Ejecutamos la consulta en cada registro
  foreach ( $Lista as $Dato )
    { $Sentencia->execute ($Dato); }
 
  // Vemos si hay error
  $Error = $Conexion->errorInfo();
 
  // La respuesta depende del error
  if ( $Error[0] )
    { $Respuesta = $Error[2]; }
  else
    { $Respuesta = ""; }
 
  // Cerramos la conexión
  $Conexion = null;
 
  // Devolvemos el error
  return $Respuesta;
  }
 
//----------------------------
// Funciones internas
//----------------------------
 
//--------------------------------------------------------------
// Atrapa las posibles excepciones
function BD_GestorExcepciones ($Excepcion)
  { echo "Excepción no capturada: " , $Excepcion->getMessage(), "\n"; }
 
//--------------------------------------------------------------
// Devuelve un manejador PDO para conectar con la base de datos
function BD_Conexion()
  {
  // El archivo con la base de datos
  global $FicheroBaseDato;
 
  // Nos preparamos para manejar una excepción si no se puede
  // realizar la conexión
  set_exception_handler('BD_GestorExcepciones');
 
  // Abrimos una conexión a la base de datos
  $Conexion = new PDO ("sqlite:$FicheroBaseDato");
 
  // Devolvemos el manejador
  return $Conexion;
  }
 
?>