Ver índice
PDO – Altas SQLite / MySQL

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Los diferentes elementos de una tabla

Cuando estudiábamos las tablas MySQL habíamos creado una tabla cuyo código fuente puedes ver aquí. Vamos a evaluar ese código y efectuar algunas modificaciones para poder utilizarlo en SQLite. Para mayor comodidad hemos guardado la funcion conecta(), que permitía instanciar el constructor de PDO, en un fichero llamado conecta.inc.php para poder incluirlo de una forma más cómoda en todos nuestros scripts.

Las diferencias sintácticas en la definición de la tabla de ambos tipos de base de datos (MySQL y SQLite) son las que tienes resumidas en esta tabla:

Diferencias de sintaxis en definición de tablas
MySQL    Contador TINYINT(8) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT
SQLite    Contador INTEGER PRIMARY KEY AUTOINCREMENT
SQLite no admite ni ZEROFILL ni UNSIGNED. Los campos auticrementales en SQLite tienen que ser definidos obligatoriamente como:
INTEGER PRIMARY KEY AUTOINCREMENT
MySQL    DNI CHAR(8) NOT NULL
SQLite    DNI CHAR(8) NOT NULL UNIQUE
Los indices únicos se definen en SQLite incluyendo la palabra UNIQUE como un flag en la definición del campo.
MySQL     Sexo Enum('M','F') DEFAULT 'M' not null
SQLite    Sexo VARCHAR DEFAULT 'M' not null
SQLite no permite campos del tipo Enum. Por esa razon lo convertimos en VARCHAR. Ya buscará SQLite las afinidades de esta palabra.
En cualquier caso no va a presentarnos demasiados problemas. Bastaría con utilizar algún recurso de PHP para restringir el contenido
de ese campo a un valor 'M' o 'F'.
MySQL    Idiomas SET(' Castellano',' Francés','Inglés',' Alemán',' Búlgaro',' Chino')
SQLite    Idiomas VARCHAR
Tampoco están permitidos en SQLite los campos tipo SET. Lo sustituimos por VARCHAR.
Por cuestión de compatibilidad entre ambas tablas optamos por hacer de este mismo tipo, VARCHAR, el campo Idiomas de la tabla MySQL.
Dado que este tipo va a recoger un número en la tabla siempre será posible emular su comportamiento incluyendo una función PHP que interprete ese valor
MySQL    PRIMARY KEY(DNI)
SQLite    
En SQLite las claves primarias, únicas e indices se incluyen en la propia definición del campo. Por lo tanto esta línea no es requerida.
MySQL    UNIQUE auto (Contador)
SQLite     
En SQLite las claves primarias, únicas e indices se incluyen en la propia definición del campo. Por lo tanto esta línea no es requerida.
MySQL    type=MyISAM
SQLite      
La definición de tipo de tabla es exclusiva de MySQL. Cuando se trata de SQLite no se requiere esa definición

Respetando las exigencias comentadas en la tabla anterior hemos creado este script mediante el cual construiremos dos tablas de características bastante similares.

<?php
include('conecta.inc.php');

/* Hacemos dos llamada a esta función conecta incluida en el fichero conecta.inc.php
como parámetros nombre de la base de datos y tipo.

Creamos dos objetos, uno para MySQL y en la otra el SQLite */

$dbMySQL= conecta('ejemploSQLite','MySQL');
$dbSQLite= conecta('ejemploSQLite','SQLite');

/* asignamos a la variable tabla en nombre de la nueva tabla */
$tabla='demo4';
/* transcribimos el código del ejemplo 379  */
$crear="CREATE TABLE IF NOT EXISTS $tabla (";
$crear.="Contador TINYINT(8)  UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT,";
$crear.="DNI CHAR(8) NOT NULL,  ";
$crear.="Nombre VARCHAR (20)  NOT NULL, ";
$crear.="Apellido1 VARCHAR (15)  not null, ";
$crear.="Apellido2 VARCHAR (15)  not null, ";
$crear.="Nacimiento DATE DEFAULT '1970-12-21', ";
$crear.="Hora TIME DEFAULT '00:00:00', ";
$crear.="Sexo Enum('M','F') DEFAULT 'M' not null, ";
$crear.="Fumador CHAR(0) , ";
$crear.="Idiomas SET(' Castellano',' Francés','Inglés',' Alemán',' Búlgaro',' Chino'), ";
$crear.=" PRIMARY KEY(DNI), ";
$crear.=" UNIQUE auto (Contador)";
$crear.=")type=MyISAM";


$crear1="CREATE TABLE IF NOT EXISTS $tabla (";
$crear1.="Contador INTEGER PRIMARY KEY AUTOINCREMENT,";
$crear1.="DNI CHAR(8) NOT NULL UNIQUE,  ";
$crear1.="Nombre VARCHAR (20)  NOT NULL, ";
$crear1.="Apellido1 VARCHAR (15)  not null, ";
$crear1.="Apellido2 VARCHAR (15)  not null, ";
$crear1.="Nacimiento DATE DEFAULT '1970-12-21', ";
$crear1.="Hora TIME DEFAULT '00:00:00', ";
$crear1.="Sexo VARCHAR DEFAULT 'M' not null, ";
$crear1.="Fumador CHAR(0) , ";
$crear1.="Idiomas VARCHAR ";
$crear1.=")";



/* realizamos la consulta de creación en ambas bases de datos*/
if($dbSQLite->query($crear1)){
    print "La tabla SQLite $tabla ha sido CREADA<br>";
   } else{
        print "Ha habido un error de PDO: <br />" ;
        echo "<pre>";
            print_r($dbSQLite->errorInfo());
        echo "</pre>";
}
/* repetimos el mismo proceso ahora con la base de datos MySQL */
if($dbMySQL->query($crear)){
    print "La tabla MySQL $tabla ha sido CREADA<br>";
   } else{
        print "Ha habido un error de PDO: <br />" ;
        echo "<pre>";
            print_r($dbSQLite->errorInfo());
        echo "</pre>";
}

?>

Añadir registros a una tabla

La sentencia SQLite que permite añadir registros a una tabla –muy similar a la utilizada por MySQL– es la siguiente:

INSERT INTO tabla (campo1,campo2,..) VALUES (valor1,valor2,..)

dónde tabla es el nombre de la tabla, campo1, campo2, etc. son los nombres de los campos y valor1, valor2, etc. son los valores a incluir en cada uno de los campos.

La única diferencia entre esta sentencia y la equivalente de MySQL es que aquí la palabra INTO tiene carácter obligatorio mientras que allí solo es opcional.

Añadir un registro

Igual que ocurría en el caso de MySQL también aquí puede añadirse un registro incluyendo los valores en la propia sentencia o recogiéndolos de variables PHP previamente definidas.

En este ejemplo, dual como todos los siguientes, se agrega a la tabla demo4 de dos bases de datos distintas –SQLite y MySQL– cuyo nombre es ejemploSQLite un registro cuyos valores son:

DNI Nombre Apellido1 Apellido2 Nacimiento Sexo Hora Fumador Idiomas
1234 Lupicinio Servidor Servido 1954-11-23 M 16:24:52 null 3

Ver código fuente

Presta atención a los siguientes aspectos:

El error PDO generado al producirse una coincidencia de valores en un campo único tiene el código 19. En este ejemplo puedes la manera de utilizarlo para depurar el mensaje de advertencia.

Ver código fuente

Añadir un registro a partir de datos contenidos en variables

También es posible añadir registros a partir de valores contenidos en variables PHP. Esta opción es, sin ninguna duda, la más utilizada, ya que lo habitual será escribir el contenido a añadir en un form y después –a través del method (POST o GET)– pasar al script de inserción esos valores como variables PHP.

Aquí tienes el código fuente de un ejemplo con la tabla anterior.

Ver código fuente

Quizá te resulten de alguna utilidad estos comentarios:

Añadir datos mediante formulario

Creación del formulario

El caso más frecuente –casi el único– es que los registros de una tabla se añadan utilizando un formulario y enviando desde él los datos a un script PHP que ejecute la opción de añadir. Si no recuerdas el funcionamiento de este método pulsa aquí

En el ejemplo hemos desarrollado un formulario para añadir registros a la tabla demo4 idéntico al descrito para MySQL. Su código fuente está en este enlace.

Ver código fuente

Añadir nuevo registro con datos del formulario

Tampoco existen grandes diferencias con lo dicho para MySQL en cuanto a la forma de interpretar los datos recibidos a través del formulario. Aquí tienes –comentado– el script que efectúa la inserción de datos en las tablas de ambos tipos.

Añadir registros mediante formulario Código fuente del script

Tablas para pruebas

Tal como hacíamos cuando estudiábamos MySQL aquí tienes comentado un script que permite agregar aleatoriamente y de forma automática una serie de registros para pruebas a las tablas demo4 de la base de datos ejemploSQLite tanto en formato SQLite como en MySQL.

Ver código fuente