En esta página se muestran una parte de las soluciones de los ejercicios PDO, concretamente el fragmento PHP, sin el principio ni el final de la página que se pueden dejar en fragmentos HTML.
Si lo prefiere, puede descargar unas posibles soluciones completas de estos ejercicios.
<?php
//
//
// PASO 1: Definir las opciones del programa
// Variables configurables por el administrador de la aplicación
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/pdo-1.sqlite"; // Ubicación de la base de datos
// Tamaño de los campos en la tabla Personas
$cfg["tablaPersonasTamNombre"] = 40; // Tamaño de la columna Personas > Nombre
$cfg["tablaPersonasTamApellidos"] = 60; // Tamaño de la columna Personas > Apellidos
// Variables configurables por el programador de la aplicación
// Nombres de las tablas
$cfg["tablaPersonas"] = "personas"; // Nombre de la tabla Personas
//
//
// PASO 2: Crear el objeto PDO de conexión con la base de datos.
// SQLITE: Conexión con la base de datos
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("sqlite:$cfg[sqliteDatabase]");
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->query("PRAGMA foreign_keys = ON");
$tmp->query("PRAGMA encoding = 'UTF-8'");
return $tmp;
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
}
}
// CONEXIÓN CON LA BASE DE DATOS
$pdo = conectaDb();
//
//
// PASO 3: Borrar la tabla.
// CONSULTA DE BORRADO DE TABLA
$consulta = "DROP TABLE IF EXISTS $cfg[tablaPersonas]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla borrada correctamente (si existía).</p>\n";
}
print "\n";
//
//
// PASO 4: Crear la tabla.
// SQLITE: CONSULTA DE CREACIÓN DE TABLA
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER PRIMARY KEY,
nombre VARCHAR($cfg[tablaPersonasTamNombre]) COLLATE NOCASE,
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]) COLLATE NOCASE
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
print "\n";
//
//
// PASO 5: Insertar un registro en la tabla.
// CONSULTA DE INSERCIÓN DE REGISTRO
$nombre = "Pepito"; // Normalmente estos valores vendrán de un formulario
$apellidos = "Conejo";
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
//
//
// PASO 6: Mostrar cuántos registros hay en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE DEVUELVE UN ÚNICO REGISTRO DE UNA COLUMNA
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
//
//
// PASO 7: Mostrar los valores del registro guardado en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE PUEDE DEVOLVER VARIOS REGISTROS (O UNO O NINGUNO)
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
//
//
// PASO 8: Modificar el registro guardado en la tabla.
// CONSULTA DE MODIFICACIÓN DE REGISTRO
$id = "1"; // Normalmente estos valores vendrán de un formulario
$nombre = "Pepita";
$apellidos = "Conejo";
$consulta = "UPDATE $cfg[tablaPersonas]
SET nombre = :nombre, apellidos = :apellidos
WHERE id = :id";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos, ":id" => $id])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro modificado correctamente.</p>\n";
print "\n";
}
//
//
// PASO 9: Mostrar los valores del registro guardado en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE PUEDE DEVOLVER VARIOS REGISTROS (O UNO O NINGUNO)
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
//
//
// PASO 10: Insertar un segundo registro en la tabla.
// CONSULTA DE INSERCIÓN DE REGISTRO
$nombre = "Numa"; // Normalmente estos valores vendrán de un formulario
$apellidos = "Nigerio";
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
//
//
// PASO 11: Mostrar cuántos registros hay en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE DEVUELVE UN ÚNICO REGISTRO DE UNA COLUMNA
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
//
//
// PASO 12: Mostrar los valores de los dos registros guardados en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE PUEDE DEVOLVER VARIOS REGISTROS (O UNO O NINGUNO)
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
//
//
// PASO 13: Borrar el primer registro guardado en la tabla.
// CONSULTA DE BORRADO DE REGISTROS
$id = [1 => "on"]; // Normalmente este valor vendrá de un formulario (en este caso, como matriz).
foreach ($id as $indice => $valor) {
$consulta = "DELETE FROM $cfg[tablaPersonas]
WHERE id = :indice";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":indice" => $indice])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro borrado correctamente (si existía).</p>\n";
print "\n";
}
}
//
//
// PASO 14: Mostrar los valores del registro guardado en la tabla.
// CONSULTA DE SELECCIÓN DE REGISTROS QUE PUEDE DEVOLVER VARIOS REGISTROS (O UNO O NINGUNO)
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
?>
<?php
// SQLITE: FUNCIÓN DE CONEXIÓN CON LA BASE DE DATOS
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("sqlite:$cfg[sqliteDatabase]");
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->query("PRAGMA foreign_keys = ON");
$tmp->query("PRAGMA encoding = 'UTF-8'");
return $tmp;
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
}
}
// SQLITE: FUNCIÓN DE BORRADO Y CREACIÓN DE TABLA
function borraTodo()
{
global $pdo, $cfg;
$consulta = "DROP TABLE IF EXISTS $cfg[tablaPersonas]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla borrada correctamente (si existía).</p>\n";
}
print "\n";
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER PRIMARY KEY,
nombre VARCHAR($cfg[tablaPersonasTamNombre]) COLLATE NOCASE,
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]) COLLATE NOCASE
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
print "\n";
}
// FUNCIÓN DE INSERCIÓN DE REGISTRO
function insertaRegistro($nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE CONTEO DE REGISTROS
function cuentaRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
}
// FUNCIÓN DE SELECCIÓN DE TODOS LOS REGISTROS
function muestraRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
}
// FUNCIÓN DE MODIFICACIÓN DE REGISTRO
function modificaRegistro($id, $nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "UPDATE $cfg[tablaPersonas]
SET nombre = :nombre, apellidos = :apellidos
WHERE id = :id";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos, ":id" => $id])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro modificado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE BORRADO DE REGISTROS
function borraRegistros($id)
{
global $pdo, $cfg;
foreach ($id as $indice => $valor) {
$consulta = "DELETE FROM $cfg[tablaPersonas]
WHERE id = :indice";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":indice" => $indice])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro borrado correctamente (si existía).</p>\n";
print "\n";
}
}
}
// Variables configurables por el administrador de la aplicación
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/pdo-2.sqlite"; // Ubicación de la base de datos
// Tamaño de los campos en la tabla Personas
$cfg["tablaPersonasTamNombre"] = 40; // Tamaño de la columna Personas > Nombre
$cfg["tablaPersonasTamApellidos"] = 60; // Tamaño de la columna Personas > Apellidos
// Variables configurables por el programador de la aplicación
$cfg["tablaPersonas"] = "personas"; // Nombre de la tabla Personas
$pdo = conectaDb();
borraTodo();
insertaRegistro("Pepito", "Conejo");
cuentaRegistros();
muestraRegistros();
modificaRegistro(1, "Pepita", "Conejo");
muestraRegistros();
insertaRegistro("Numa", "Nigerio");
cuentaRegistros();
muestraRegistros();
borraRegistros([1 => "on"]);
muestraRegistros();
?>
<?php
// Variables configurables por el administrador de la aplicación
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/pdo-3.sqlite"; // Ubicación de la base de datos
// Tamaño de los campos en la tabla Personas
$cfg["tablaPersonasTamNombre"] = 40; // Tamaño de la columna Personas > Nombre
$cfg["tablaPersonasTamApellidos"] = 60; // Tamaño de la columna Personas > Apellidos
<?php
// Variables configurables por el administrador de la aplicación
require_once "config.php";
// Variables configurables por el programador de la aplicación
// Nombres de las tablas
$cfg["tablaPersonas"] = "personas"; // Nombre de la tabla Personas
// SQLITE: FUNCIÓN DE CONEXIÓN CON LA BASE DE DATOS
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("sqlite:$cfg[sqliteDatabase]");
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->query("PRAGMA foreign_keys = ON");
$tmp->query("PRAGMA encoding = 'UTF-8'");
return $tmp;
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
}
}
// SQLITE: FUNCIÓN DE BORRADO Y CREACIÓN DE TABLA
function borraTodo()
{
global $pdo, $cfg;
$consulta = "DROP TABLE IF EXISTS $cfg[tablaPersonas]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla borrada correctamente (si existía).</p>\n";
}
print "\n";
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER PRIMARY KEY,
nombre VARCHAR($cfg[tablaPersonasTamNombre]) COLLATE NOCASE,
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]) COLLATE NOCASE
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
print "\n";
}
// FUNCIÓN DE INSERCIÓN DE REGISTRO
function insertaRegistro($nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE CONTEO DE REGISTROS
function cuentaRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
}
// FUNCIÓN DE SELECCIÓN DE TODOS LOS REGISTROS
function muestraRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
}
// FUNCIÓN DE MODIFICACIÓN DE REGISTRO
function modificaRegistro($id, $nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "UPDATE $cfg[tablaPersonas]
SET nombre = :nombre, apellidos = :apellidos
WHERE id = :id";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos, ":id" => $id])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro modificado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE BORRADO DE REGISTROS
function borraRegistros($id)
{
global $pdo, $cfg;
foreach ($id as $indice => $valor) {
$consulta = "DELETE FROM $cfg[tablaPersonas]
WHERE id = :indice";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":indice" => $indice])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro borrado correctamente (si existía).</p>\n";
print "\n";
}
}
}
<?php
require_once "biblioteca.php";
$pdo = conectaDb();
borraTodo();
insertaRegistro("Pepito", "Conejo");
cuentaRegistros();
muestraRegistros();
modificaRegistro(1, "Pepita", "Conejo");
muestraRegistros();
insertaRegistro("Numa", "Nigerio");
cuentaRegistros();
muestraRegistros();
borraRegistros([1 => "on"]);
muestraRegistros();
?>
<?php
// Variables configurables por el administrador de la aplicación
// Configuración para MySQL
$cfg["mysqlHost"] = "localhost"; // Nombre de host
$cfg["mysqlUser"] = ""; // Nombre de usuario
$cfg["mysqlPassword"] = ""; // Contraseña de usuario
$cfg["mysqlDatabase"] = ""; // Nombre de la base de datos
// Configuración de la tabla Personas
$cfg["tablaPersonasTamNombre"] = 40; // Tamaño de la columna Personas > Nombre
$cfg["tablaPersonasTamApellidos"] = 60; // Tamaño de la columna Personas > Apellidos
<?php
// Variables configurables por el administrador de la aplicación
require_once "config.php";
// Variables configurables por el programador de la aplicación
// Nombres de las tablas
$cfg["tablaPersonas"] = "personas"; // Nombre de la tabla Personas
// Funciones
// MYSQL: FUNCIÓN DE CONEXIÓN CON LA BASE DE DATOS
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("mysql:host=$cfg[mysqlHost];dbname=$cfg[mysqlDatabase];charset=utf8mb4", $cfg["mysqlUser"], $cfg["mysqlPassword"]);
} catch (PDOException $e) {
$tmp = new PDO("mysql:host=$cfg[mysqlHost];charset=utf8mb4", $cfg["mysqlUser"], $cfg["mysqlPassword"]);
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
} finally {
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
return $tmp;
}
}
// MYSQL: FUNCIÓN DE BORRADO Y CREACIÓN DE BASE DE DATOS Y TABLA
function borraTodo()
{
global $pdo, $cfg;
$consulta = "DROP DATABASE IF EXISTS $cfg[mysqlDatabase]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la base de datos. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos borrada correctamente (si existía).</p>\n";
}
print "\n";
$consulta = "CREATE DATABASE $cfg[mysqlDatabase]
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la base de datos. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos creada correctamente.</p>\n";
print "\n";
}
$consulta = "USE $cfg[mysqlDatabase]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos seleccionada correctamente.</p>\n";
print "\n";
}
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER UNSIGNED AUTO_INCREMENT,
nombre VARCHAR($cfg[tablaPersonasTamNombre]),
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]),
PRIMARY KEY(id)
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
}
// FUNCIÓN DE INSERCIÓN DE REGISTRO
function insertaRegistro($nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE CONTEO DE REGISTROS
function cuentaRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
}
// FUNCIÓN DE SELECCIÓN DE TODOS LOS REGISTROS
function muestraRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
}
// FUNCIÓN DE MODIFICACIÓN DE REGISTRO
function modificaRegistro($id, $nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "UPDATE $cfg[tablaPersonas]
SET nombre = :nombre, apellidos = :apellidos
WHERE id = :id";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos, ":id" => $id])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro modificado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE BORRADO DE REGISTROS
function borraRegistros($id)
{
global $pdo, $cfg;
foreach ($id as $indice => $valor) {
$consulta = "DELETE FROM $cfg[tablaPersonas]
WHERE id = :indice";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":indice" => $indice])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro borrado correctamente (si existía).</p>\n";
print "\n";
}
}
}
<?php
require_once "biblioteca.php";
$pdo = conectaDb();
borraTodo();
insertaRegistro("Pepito", "Conejo");
cuentaRegistros();
muestraRegistros();
modificaRegistro(1, "Pepita", "Conejo");
muestraRegistros();
insertaRegistro("Numa", "Nigerio");
cuentaRegistros();
muestraRegistros();
borraRegistros([1 => "on"]);
muestraRegistros();
?>
<?php
// Variables configurables por el administrador de la aplicación
// Base de datos utilizada por la aplicación
$cfg["dbMotor"] = SQLITE; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/pdo-5.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "localhost"; // Nombre de host
$cfg["mysqlUser"] = ""; // Nombre de usuario
$cfg["mysqlPassword"] = ""; // Contraseña de usuario
$cfg["mysqlDatabase"] = ""; // Nombre de la base de datos
// Tamaño de los campos en la tabla Personas
$cfg["tablaPersonasTamNombre"] = 40; // Tamaño de la columna Personas > Nombre
$cfg["tablaPersonasTamApellidos"] = 60; // Tamaño de la columna Personas > Apellidos
<?php
// Constantes configurables por el programador de la aplicación
define("SQLITE", 1); // Base de datos SQLITE
define("MYSQL", 2); // Base de datos MySQL
// Variables configurables por el administrador de la aplicación
require_once "config.php";
// Variables configurables por el programador de la aplicación
// Nombres de las tablas
$cfg["tablaPersonas"] = "personas"; // Nombre de la tabla Personas
// Carga Biblioteca específica de la base de datos utilizada
if ($cfg["dbMotor"] == SQLITE) {
require_once "biblioteca-sqlite.php";
} elseif ($cfg["dbMotor"] == MYSQL) {
require_once "biblioteca-mysql.php";
}
// Funciones comunes
// FUNCIÓN DE INSERCIÓN DE REGISTRO
function insertaRegistro($nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "INSERT INTO $cfg[tablaPersonas]
(nombre, apellidos)
VALUES (:nombre, :apellidos)";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro creado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE CONTEO DE REGISTROS
function cuentaRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT COUNT(*) FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>La tabla contiene {$resultado->fetchColumn()} registro(s).</p>\n";
print "\n";
}
}
// FUNCIÓN DE SELECCIÓN DE TODOS LOS REGISTROS
function muestraRegistros()
{
global $pdo, $cfg;
$consulta = "SELECT * FROM $cfg[tablaPersonas]";
$resultado = $pdo->query($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p><strong>Registro(s) obtenido(s):</strong></p>\n";
print " <ul>\n";
foreach ($resultado as $registro) {
print " <li>$registro[id] - $registro[nombre] - $registro[apellidos]</li>\n";
}
print " </ul>\n";
print "\n";
}
}
// FUNCIÓN DE MODIFICACIÓN DE REGISTRO
function modificaRegistro($id, $nombre, $apellidos)
{
global $pdo, $cfg;
$consulta = "UPDATE $cfg[tablaPersonas]
SET nombre = :nombre, apellidos = :apellidos
WHERE id = :id";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":nombre" => $nombre, ":apellidos" => $apellidos, ":id" => $id])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro modificado correctamente.</p>\n";
print "\n";
}
}
// FUNCIÓN DE BORRADO DE REGISTROS
function borraRegistros($id)
{
global $pdo, $cfg;
foreach ($id as $indice => $valor) {
$consulta = "DELETE FROM $cfg[tablaPersonas]
WHERE id = :indice";
$resultado = $pdo->prepare($consulta);
if (!$resultado) {
print " <p class=\"aviso\">Error al preparar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} elseif (!$resultado->execute([":indice" => $indice])) {
print " <p class=\"aviso\">Error al ejecutar la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Registro borrado correctamente (si existía).</p>\n";
print "\n";
}
}
}
<?php
// SQLITE: FUNCIONES ESPECÍFICAS
// SQLITE: Conexión con la base de datos
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("sqlite:$cfg[sqliteDatabase]");
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->query("PRAGMA foreign_keys = ON");
$tmp->query("PRAGMA encoding = 'UTF-8'");
return $tmp;
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
}
}
// SQLITE: Borrado y creación de tabla
function borraTodo()
{
global $pdo, $cfg;
print " <p class=\"aviso\">Está utilizando SQLite</p>\n";
print "\n";
$consulta = "DROP TABLE IF EXISTS $cfg[tablaPersonas]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla borrada correctamente (si existía).</p>\n";
}
print "\n";
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER PRIMARY KEY,
nombre VARCHAR($cfg[tablaPersonasTamNombre]) COLLATE NOCASE,
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]) COLLATE NOCASE
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
print "\n";
}
<?php
// MYSQL: FUNCIONES ESPECÍFICAS
// MYSQL: Conexión con la base de datos
function conectaDb()
{
global $cfg;
try {
$tmp = new PDO("mysql:host=$cfg[mysqlHost];dbname=$cfg[mysqlDatabase];charset=utf8mb4", $cfg["mysqlUser"], $cfg["mysqlPassword"]);
} catch (PDOException $e) {
$tmp = new PDO("mysql:host=$cfg[mysqlHost];charset=utf8mb4", $cfg["mysqlUser"], $cfg["mysqlPassword"]);
} catch (PDOException $e) {
print " <p class=\"aviso\">Error: No puede conectarse con la base de datos. {$e->getMessage()}</p>\n";
exit;
} finally {
$tmp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
$tmp->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
return $tmp;
}
}
// MYSQL: Borrado y creación de base de datos y tabla
function borraTodo()
{
global $pdo, $cfg;
print " <p class=\"aviso\">Está utilizando MySQL con el usuario $cfg[mysqlUser]</p>\n";
print "\n";
$consulta = "DROP DATABASE IF EXISTS $cfg[mysqlDatabase]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al borrar la base de datos. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos borrada correctamente (si existía).</p>\n";
}
print "\n";
$consulta = "CREATE DATABASE $cfg[mysqlDatabase]
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la base de datos. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos creada correctamente.</p>\n";
print "\n";
}
$consulta = "USE $cfg[mysqlDatabase]";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error en la consulta. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Base de datos seleccionada correctamente.</p>\n";
print "\n";
}
$consulta = "CREATE TABLE $cfg[tablaPersonas] (
id INTEGER UNSIGNED AUTO_INCREMENT,
nombre VARCHAR($cfg[tablaPersonasTamNombre]),
apellidos VARCHAR($cfg[tablaPersonasTamApellidos]),
PRIMARY KEY(id)
)";
if (!$pdo->query($consulta)) {
print " <p class=\"aviso\">Error al crear la tabla. SQLSTATE[{$pdo->errorCode()}]: {$pdo->errorInfo()[2]}</p>\n";
} else {
print " <p>Tabla creada correctamente.</p>\n";
}
}
<?php
require_once "biblioteca.php";
$pdo = conectaDb();
borraTodo();
insertaRegistro("Pepito", "Conejo");
cuentaRegistros();
muestraRegistros();
modificaRegistro(1, "Pepita", "Conejo");
muestraRegistros();
insertaRegistro("Numa", "Nigerio");
cuentaRegistros();
muestraRegistros();
borraRegistros([1 => "on"]);
muestraRegistros();
?>