En esta lección se proponen soluciones detalladas de los ejercicios (2) de phpMyAdmin. Se recomienda intentar realizarlos primero sin recurrir a estas soluciones.
/* config.php aplicación agenda-1 */
// Base de datos utilizada por el programa: MYSQL o SQLITE
$dbMotor = MYSQL // Base de datos utilizada por la aplicación
$cfg["dbMotor"] = MYSQL; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/iaw-agenda-1.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "mysql:host=localhost"; // Nombre de host
$cfg["mysqlUser"] = "iaw_agenda_1"; // Nombre de usuario
$cfg["mysqlPassword"] = "iaw_agenda_1"; // Contraseña de usuario
$cfg["mysqlDatabase"] = "iaw_agenda_1"; // Nombre de la base de datos
/* config.php aplicación agenda-2a */
// Base de datos utilizada por el programa: MYSQL o SQLITE
$dbMotor = MYSQL // Base de datos utilizada por la aplicación
$cfg["dbMotor"] = MYSQL; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/iaw-agenda-1.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "mysql:host=localhost"; // Nombre de host
$cfg["mysqlUser"] = "iaw_agenda_2"; // Nombre de usuario
$cfg["mysqlPassword"] = "iaw_agenda_2"; // Contraseña de usuario
$cfg["mysqlDatabase"] = "iaw_agenda_2_agenda_2a"; // Nombre de la base de datos
/* config.php aplicación agenda-2b */
// Base de datos utilizada por el programa: MYSQL o SQLITE
$dbMotor = MYSQL // Base de datos utilizada por la aplicación
$cfg["dbMotor"] = MYSQL; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/iaw-agenda-1.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "mysql:host=localhost"; // Nombre de host
$cfg["mysqlUser"] = "iaw_agenda_2"; // Nombre de usuario
$cfg["mysqlPassword"] = "iaw_agenda_2"; // Contraseña de usuario
$cfg["mysqlDatabase"] = "iaw_agenda_2_agenda_2b"; // Nombre de la base de datos
Este ejercicio se resuelve como el ejercicio phpMyadmin (2) 1.
El "truco" para que un usuario con una única base de datos pueda instalar dos aplicaciones es que las aplicaciones trabajen con tablas distintas.
/* config.php aplicación agenda-3a */
// Base de datos utilizada por el programa: MYSQL o SQLITE
$dbMotor = MYSQL // Base de datos utilizada por la aplicación
$cfg["dbMotor"] = MYSQL; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/iaw-agenda-1.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "mysql:host=localhost"; // Nombre de host
$cfg["mysqlUser"] = "iaw_agenda_3"; // Nombre de usuario
$cfg["mysqlPassword"] = "iaw_agenda_3"; // Contraseña de usuario
$cfg["mysqlDatabase"] = "iaw_agenda_3"; // Nombre de la base de datos
/* bblioteca-mysql.php aplicación agenda-3a */
// MYSQL: Nombres de las tablas
$cfg["dbPersonasTabla"] = "$cfg[mysqlDatabase].personas_3a"; // Nombre de la tabla Personas
/* config.php aplicación agenda-3b */
// Base de datos utilizada por el programa: MYSQL o SQLITE
$dbMotor = MYSQL // Base de datos utilizada por la aplicación
$cfg["dbMotor"] = MYSQL; // Valores posibles: MYSQL o SQLITE
// Configuración para SQLite
$cfg["sqliteDatabase"] = "/tmp/iaw-agenda-1.sqlite"; // Ubicación de la base de datos
// Configuración para MySQL
$cfg["mysqlHost"] = "mysql:host=localhost"; // Nombre de host
$cfg["mysqlUser"] = "iaw_agenda_3"; // Nombre de usuario
$cfg["mysqlPassword"] = "iaw_agenda_3"; // Contraseña de usuario
$cfg["mysqlDatabase"] = "iaw_agenda_3"; // Nombre de la base de datos
/* bblioteca-mysql.php aplicación agenda-3b */
// MYSQL: Nombres de las tablas
$cfg["dbPersonasTabla"] = "$cfg[mysqlDatabase].personas_3b"; // Nombre de la tabla Personas
Para resolver este problema basta con eliminar el borrado y creación de la base de datos de la función borrarTodo():
/* biblioteca-mysql.php aplicación agenda-3a y agenda-3b */
function borraTodo()
{
global $pdo, $cfg;
$consulta = "DROP TABLE IF EXISTS $cfg[dbPersonasTabla]";
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[dbPersonasTabla] (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nombre VARCHAR($cfg[dbPersonasTamNombre]),
apellidos VARCHAR($cfg[dbPersonasTamApellidos]),
telefono VARCHAR($cfg[dbPersonasTamTelefono]),
correo VARCHAR($cfg[dbPersonasTamCorreo]),
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";
}
}
/* biblioteca-mysql.php aplicación agenda-3a y agenda-3b */
function borraTodo()
{
global $pdo, $cfg;
$consulta = "CREATE DATABASE IF NOT EXISTS $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 (si no existía).</p>\n";
}
$consulta = "DROP TABLE IF EXISTS $cfg[dbPersonasTabla]";
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[dbPersonasTabla] (
id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nombre VARCHAR($cfg[dbPersonasTamNombre]),
apellidos VARCHAR($cfg[dbPersonasTamApellidos]),
telefono VARCHAR($cfg[dbPersonasTamTelefono]),
correo VARCHAR($cfg[dbPersonasTamCorreo]),
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";
}
}