Conectarse a una base de datos.

Resumen.

Ahora que ya hemos creado nuestra base de datos y la primera tabla, lo primero que tenemos que hacer es lograr que nuestras páginas interactúen con la base de datos (BD). Para ello necesitamos establecer una conexión entre nuestras páginas y la base de datos, a esto vamos a dedicar este capitulo. Y lo haremos teniendo en cuenta que no es lo mismo conectarse a una BD con PHP5 o con PHP7, y PHP8.

Artículo.

En Internet encontramos muchísimos artículos dedicados a las bases de datos, y aún a día de hoy, cuando ya parece lejano PHP5, muchas webs siguen funcionando con esta versión. El motivo es simple, la actualización de PHP5 a PHP7 es un poco más costosa de lo que fue, por ejemplo, de PHP4 a PHP5. El motivo fundamental, más allá de que hayan experimentado cambios algunas funciones, han sido eliminadas unas e introducido otras nuevas, es la forma de establecer conexión con la base de datos.

Para conectarnos a una base de datos en PHP5 lo hacíamos de la siguiente manera:


<?php
/* Parametros a configurar para la conexion de la base de datos en PHP5 */
$hots = 'localhost';
$base_datos = 'nombre_bd';
$usuario_bd = 'usuario_bd';
$clave_bd = 'clave_bd';
// Tablas de nuestra base de datos
$tb1 = 'regis_usuarios';
$tb2 = 'blog';
$tb3 = 'cometarios';
$tb4 = 'mensajes';

// Mensajes en caso de conexion fallida
$Denegado = '<p><b>Conexión Denegada</b>, algún dato de conexión <b>NO</b> es válido</p>';
$BD_no_Existe = "<p>La Base de Datos <b>$base_datos</b> NO EXISTE</p>";
// Ejecutamos la conexion
$Conex_BD = mysql_connect($hots,$usuario_bd,$clave_bd)or die($Denegado);
// Comprobamos si la base de datos existe
mysql_select_db($base_datos,$Conex_BD)or die($BD_no_Existe);
?>


La conexión a la base de datos en PHP7 aunque es muy similar, precisa unos cambios, quedaría así:


<?php
/* Parametros a configurar para la conexion de la base de datos en PHP7 y PHP8 */
$hots = 'localhost';
$base_datos = 'nombre_bd';
$usuario_bd = 'usuario_bd';
$clave_bd = 'clave_bd';

// Tablas de nuestra base de datos
$tb1 = 'regis_usuarios';
$tb2 = 'blog';
$tb3 = 'cometarios';
$tb4 = 'mensajes';

// Mensajes en caso de conexion fallida
$Denegado = '<p><b>Conexión Denegada</b>, algún dato de conexión <b>NO</b> es válido</p>';
$BD_no_Existe = "<p>La Base de Datos <b>$base_datos</b> NO EXISTE</p>";
// Ejecutamos la conexion
$Conex_BD = mysqli_connect($hots,$usuario_bd,$clave_bd)or die($Denegado);
// Comprobamos si la base de datos existe
mysqli_select_db($Conex_BD,$base_datos)or die($BD_no_Existe);
?>


Como podemos ver las diferencias son sutiles, mysql pasa a mysqli y $base_datos,$Conex_BD pasa a $Conex_BD,$base_datos.

Quiero mencionar también algo que es costumbre mía, y que considero que es una buena práctica aunque no necesaria para conectarse a una base de datos, y es que tras la conexión me gusta guardar el nombre de las tablas en una variable, pero como ya he dicho, esta es una costumbre que podéis adoptar o no.

Tras la conexión ejecutaremos las consultas pertinentes a la base de datos, y una vez finalizadas estas, debemos cerrar la conexión a la base de datos, lo que haremos de la siguiente manera:


<?php
// Cerramos la conexión a la base de datos en PHP5
mysql_close($Conex_BD);

// Cerramos la conexión a la base de datos en PHP7
mysqli_close($Conex_BD);
?>


La manera mas lógica de ejecutar una consulta a una base de datos seria crear un archivo con los datos de apertura de conexión y otro con los datos de cierre de conexión, lo que podría tomar la siguiente forma:


<?php
// Abrimos la conexion
include('abrir_conexion.php');

Aquí irían las consultas a nuestra base de datos

// Cerramos la conexión
include('cerrar_conexion.php');
?>


Y llegados a este punto, vamos a hacer nuestra primera consulta, y lo que vamos a hacer es comprobar si una determinada tabla existe en nuestra base de datos.


<?php
// Comprobamos la existencia de una tabla

include('archivos/abrir_conexion.php');

// Nombre de la tabla que queremos verificar
$existe_tabla = 'regis_usuarios';

$_Tabla = "SHOW COLUMNS FROM $existe_tabla";
$Campos_Tabla = mysqli_query($Conex_BD,$_Tabla);

while ($fila = @mysqli_fetch_assoc($Campos_Tabla)){
$Los_Campos[] = $fila['Field'];
}
// Contamos los valores existentes en el array
$n_campos = @array_count_values($Los_Campos);
// Si el numero de values del array es mayor que cero, existe tabla
if($n_campos > 0){
// La tabla existe
echo "La tabla <b>$existe_tabla</b> existe.";
// Imprimimos el array que contiene los campos
echo '<pre>';
print_r($Los_Campos);
echo '</pre>';
// Tambien los podemos imprimir como cadena de texto
$cadena_campos = implode(', ', $Los_Campos);
echo "<p>$cadena_campos</p>";
}else{
// La tabla NO existe
echo "La tabla <b>$existe_tabla NO</b> existe.";
}

include('archivos/cerrar_conexion.php');
?>


Lo que hemos hecho es sencillo, hemos creado una carpeta que se llama “archivos” para guardar los archivos de apertura y cierre de conexión, y cargamos esos archivos mediante la sentencia include().


Seguidamente con la función SHOW COLUMNS de MySQL extraemos los nombres de los campos de la tabla. En el bucle “while” podemos ver algo que parece extraño y es @mysqli_fetch_assoc, la @ ante la función MySQL hace que no nos devuelva valores de error cuando la tabla no existe, este error se produce por que se intenta iterar sobre un array no existente. Cuando la tabla si existe, dicho error no se produce. Lo mismo ocurre en “@array_count_values”, ya que se trataría de contar elementos en un array inexistente.

Este código está escrito en PHP 7, para que este código funcione en PHP 5 solo es preciso eliminar la “i” de mysqli y dejarla como mysql, y por supuesto eliminar el nombre de la variable conexión $Conex_BD.

Por ultimo, indicar la conexión a la base de datos también se puede hacer en forma de función, pudiendo así crear las dos funciones y cargarlas con el mismo archivo, eso si, tendríamos que hacer una ejecución de la función para poder conectarnos. Esto quedaría de la siguiente forma:


<?php
/* Funciones para conexion y desconexion de una base de datos */
// Esta funcion nos conecta a la base de datos
function ConectaBD(){

$hots = 'localhost';
$base_datos = 'curso_mysql';
$usuario_bd = 'root';
$clave_bd = '';

// Mensajes en caso de conexion fallida
$Denegado = '<p><b>Conexión Denegada</b>, algún dato de conexión <b>NO</b> es válido</p>';
$BD_no_Existe = "<p>La Base de Datos <b>$base_datos</b> NO EXISTE</p>";
// Ejecutamos la conexion
$conectar_BD = mysqli_connect($hots,$usuario_bd,$clave_bd)or die($Denegado);
// Comprobamos si la base de datos existe
mysqli_select_db($conectar_BD,$base_datos)or die($BD_no_Existe);
return $conectar_BD;
}
// Aplicamos la funcion
//$Conex_BD = ConectaBD();

// --------------------------------------
// Esta funcion nos desconecta de la base de datos

function DesconectaBD($close_conexion){
$cierra_conexionBD = mysqli_close($close_conexion);
return $cierra_conexionBD;
}
// Apicamos la funcion
// DesconectaBD($Conex_BD);
// ======================================================
/* Aqui podriamos poner los nombres de las tablas o bien
asignarlos en la misma consulta, es una cuestion de formas
de trabajar */

$tb1 = 'regis_usuarios';
$tb2 = 'blog';
$tb3 = 'cometarios';
$tb4 = 'mensajes';

?>


La función de conexión, en este caso, no recibe parámetros, ya que los hemos guardado todo dentro de la misma función. Podríamos haber pasado estos datos como parámetros de la función, pero seria un tanto lioso, ya que rara vez que quisiéramos conectarnos a una base de datos tendríamos que poner todos lo datos precisos para la conexión, sería más práctico crear una nueva función en caso que tengamos un sitio Web que operar con más de una base de datos. Bajo la función hemos dejado en el mismo archivo la forma de aplicar la función, que lógicamente, no debemos ejecutarla en este archivo, si así lo hiciéramos, estaríamos desaprovechando la principal ventaja de las funciones, y es que si no se ejecutan, es como si no estuviera, no se genera consumo de recursos de servidor.

La función de desconexión si precisa un parámetro, y es precisamente la variable que lleva la conexión previamente establecida, es decir, $Conex_BD. El código de comprobación de tablas existentes anteriormente expuesto quedaría ahora de la siguiente forma:


<?php
// Comprobamos la existencia de una tabla

include('archivos/func_conexionBD.php');

// Nombre de la tabla que queremos verificar
$existe_tabla = 'regis_usuarios';

$Conex_BD = ConectaBD(); // Abrimos conexion

$_Tabla = "SHOW COLUMNS FROM $existe_tabla";
$Campos_Tabla = mysqli_query($Conex_BD,$_Tabla);

while ($fila = @mysqli_fetch_assoc($Campos_Tabla)){
$Los_Campos[] = $fila['Field'];
}

DesconectaBD($Conex_BD); // Cerramos conexion

// Contamos los valores existentes en el array
$n_campos = @array_count_values($Los_Campos);
// Si el numero de values del array es mayor que cero, existe tabla
if($n_campos > 0){
// La tabla existe
echo "La tabla <b>$existe_tabla</b> existe.";
// Imprimimos el array que contiene los campos
echo '<pre>';
print_r($Los_Campos);
echo '</pre>';
// Tambien los podemos imprimir como cadena de texto
$cadena_campos = implode(', ', $Los_Campos);
echo "<p>$cadena_campos</p>";
}else{
// La tabla NO existe
echo "La tabla <b>$existe_tabla NO</b> existe.";
}
?>


Ahora, como podemos ver, solo tenemos un “include” desde el que se cargan las dos funciones. Y vemos los puntos donde se abre la conexión y donde se cierra. Cuando cargábamos la apertura y cierre como script, es decir, sin forma de función, vimos que el cierre lo poníamos al final de la página, y aunque no esta mal puesto ahí, lo mas lógico seria cerrar la conexión según terminase la consulta, aunque este criterio, no siempre se sigue y no suele tener inconvenientes destacables.

Y llegados a este punto, concluimos este capitulo sobre la conexión a las bases de datos.
Tags: Conexión || PHP5 || PHP7 || migración || SHOW COLUMNS || función conexión

Comentarios.

Sin comentarios, publica el tuyo.