mysqli

Es bastante común que hoy en día nos veamos “obligados”, a hacer nuestras conexiones de datos por medio de objetos, y una de las formas mas sencillas es utilizando mysqli.

Hay varias formas de utilizar esta conexión a las bases de datos por medio de PHP, aunque yo prefiero como cuando siempre trabajo, tener los datos de la conexión en un archivo aparte, de modo que luego solo tengo que hacer llamadas al mismo para poder conectar y desconectar tranquilamente.

Conexión a la BBDD

El archivo de conexión sería algo parecido a este script, al que llamaremos conexion.php:

<?php
function conexion(){
 // Conecta con el servidor de MySQL
 $mysqli = @new mysqli(
 "SERVIDOR", // El servidor
 "USUARIO", // El usuario
 "PASS", // La contraseña
 "BBDD"); // La base de datos
 if(mysqli_connect_errno()) {
 echo "Error al conectar con la base de datos: " . mysqli_connect_error() ."
";
 exit;
 }
 return $mysqli;

}
?>

Con este archivo ya podemos modificar la conexión a cualquier base de datos que queramos y tan solo hace falta hacerle un include y llamar a la función para comenzar a trabajar.

Trabajo básico con mysqli

Una vez hecho esto la estructura básica para trabajar viene ase la siguiente:

//conectamos y consultamos con la bbdd por medio de msqli
$mysqli = conexion();
//hacemos una sentencia tipo select
$sentencia = "SELECT * FROM usuarios WHERE mail='$mail'";
//comprobamos que la consulta funcione correctamente
if(!($resultado = $mysqli->query($sentencia))) {
    echo "Error al ejecutar la sentencia <b>$sentencia</b>: " . $mysqli->error . "\n";
    exit;
}
//calculamos el numero de filas (solo si es necesario)
$numfilas = $resultado->num_rows;
//hacemos el recorrido por el array devuelto como resultado de la consulta
while($fila = $resultado->fetch_array()) {
	//código a hacer con el resultado de nuestra consulta
}
// Libera la memoria ocupada por el resultado
$resultado->close();
// Cierra la conexión
$mysqli->close();

Como podemos observar es muy sencillo, tan solo hace falta hacer la llamada para la conexión, lanzar la consulta en una variable, la lanzamos comprobando que funcione y luego recorremos el resultado por medio de un bucle while.

En este caso también hemos capturado el número de resultados obtenidos.

Finalmente, liberamos la memoria ocupada por el resultado, lo cual nos puede dar problemas a la larga, sobre todo si se hacen muchas consulta y se cierra la conexión a la BBDD por seguridad hasta que la volvamos a necesitar.

Cuando queremos hacer una conexión para realizar inserts, updates o deletes, es tan sencillo como en el siguiente ejemplo donde vamos a introducir un cliente en una tabla tras haber recibido los datos por medio de un formulario:

 $mysqli = conexion();
        $sentencia = "INSERT INTO clientes (nombre, telefono, movil, poblacion, direccion, cp, mail) VALUES ('$nombre','$telefono','$movil','$poblacion','$direccion','$cp','$mail')";
        if(!($resultado = $mysqli->query($sentencia))) {
            echo "Error al ejecutar la sentencia <b>$sentencia</b>;: " . $mysqli->error . "\n";
            exit;
        }
        // Libera la memoria ocupada por el resultado
        $mysqli->close();

Claramente observamos la sencillez del uso de mysqli y como se puede utilizar para el tipo de sentencias que deseemos para hacer lo que necesitemos en nuestra aplicación.

Capturando la ID de la última inserción en una tabla

Otra herramienta muy potente en mysqli es cuando estamos realizando inserciones o lecturas dinámicas, por ejemplo tenemos una serie de usuarios que tienen que asignarse a un proyecto que se acaba de crear, pero antes de que el usuario vuelva a interactuar con el sistema, de modo que necesitamos la id de la última inserción en una tabla, lo cual es tan sencillo de obtener como esto:

$mysqli = conexion();
$sentencia = "INSERT INTO proyectos (fechainicio,nombre,caracteristicas,servidor,servidorusuario,servidorusuarioclave,ftpusuario,ftpclave,bbdd,bbddusuario,bbddclave,sistema,usuario,clave,idcliente) VALUES ('$fechainicio','$nombre','$caract','$servidor','$servuser','$servuserclave','$ftpuser','$ftpclave','$bd','$bduser','$bdclave','$sistema','$usuario','$clave','$cliente')";
if(!($resultado = $mysqli->query($sentencia))) {
    echo "Error al ejecutar la sentencia <b>$sentencia</b>: " . $mysqli->error;
    exit;
}
//obtenemos el id del proyecto para trabajar con el en la segunda fase
$id=mysqli_insert_id($mysqli);
//recogemos la id del proyecto para usarlo en la introducción de los usuarios
$id = $mysqli->insert_id;
foreach ($respuestas as $key => $value) {
    $query = "INSERT INTO proyectosusuario (idproyecto, usuario) VALUES ('$id','$value')";
    if(!($resultado = $mysqli->query($query))) {
    echo "Error al ejecutar la sentencia <b>$sentencia</b>: " . $mysqli->error;
    exit;
}
}
// Libera la memoria ocupada por el resultado
$mysqli->close();