Consultas bases de datos MYSQLi en Php
En este tutorial aprenderemos los diferentes tipos de consultas que podemos realizar en bases de datos MySQL utilizando Php y MySQLi.
El objeto MYSQLI
Después de crear el objeto mysqli que contiene la conexión a la base de datos vamos a ver cómo ejecutar consultas.
Si no recuerdas cómo se realizaba la conexión puedes verlo en Conexión a base de datos MYSQLi.
Consultas sin resultado
Las consultas sin resultado no devuelven ningún dato de la base de datos.
DROP, DELETE, TRUNCATE, CREATE, INSERT Y UPDATE
- Consultas DROP
Las consultas de DROP (tirar) eliminan totalmente la estructura y los datos de una tabla o una base de datos.
Para realizar consultas a la base de datos, lo primero que hacemos es crear la consulta y guardarla en una variable
Ejemplo
$consulta = "DROP TABLE IF EXISTS usuarios";
El siguiente paso es ejecutar la consulta. Para eso usamos el método exec de MYSQLi de esta manera
Ejemplo
$conexion->exec($consulta);
Si todo ha ido bien la consulta ya estará realizada.
Si queremos que cuando ocurra un error nos lo muestre podemos incluir la siguiente línea. Lo que hace es que si ocurrió un error en la consulta cierra la conexión y muestra el texto del error.
Ejemplo
if($conexion->errno) die($conexion->error);
- Consultas DELETE
Las consultas de DELETE (borrar) eliminan una o varias filas de una tabla.
Ejemplo
$consulta = "DELETE FROM usuarios WHERE nombre = 'Juan'"; $conexion->exec($consulta); if($conexion->errno) die($conexion->error);
- Consultas TRUNCATE
Las consultas de TRUNCATE (truncar) eliminan todas las filas de una tabla sin borrar su estructura, además pone los contadores de auto-incremento a 0.
Ejemplo
$consulta = "TRUNCATE TABLE usuarios"; $conexion->exec($consulta); if($conexion->errno) die($conexion->error);
- Consultas CREATE
Las consultas de CREATE (crear) se utilizan para crear bases de datos o tablas.
Ejemplo
$consulta = "CREATE TABLE usuarios (id int NOT NULL PRIMARY KEY AUTO_INCREMENT, nombre varchar(20) NOT NULL, apellido varchar(20))"; $conexion->exec($consulta); if($conexion->errno) die($conexion->error);
- Consultas INSERT
Las consultas de INSERT (insertar) se utilizan para insertar registros en una tabla de una base de datos.
Ejemplo
$consulta = "INSERT INTO usuarios (nombre, apellido) VALUES ('Juan', 'Perez')"; $conexion->exec($consulta); if($conexion->errno) die($conexion->error);
- Consultas UPDATE
Las consultas de UPDATE (actualizar) se utilizan para actualizar registros de una tabla.
Ejemplo
$consulta = "UPDATE usuarios SET nombre = 'Luis' WHERE nombre = 'Juan'"; $conexion->exec($consulta); if($conexion->errno) die($conexion->error);
Consultas con resultado SELECT
Devuelven datos de la base de datos. Vamos a ver cómo recogerlos y utilizarlos.
Cuando las consultas devuelven un resultado tenemos que guardar ese resultado en una variable.
Ejemplo
$consulta = "SELECT nombre, apellido FROM usuarios WHERE id = 2"; $resultado = $conexion->query($consulta);
La variable $resultado es como una tabla virtual donde se guarda uno o varios registros (filas) devueltos por la consulta.
El siguiente paso es recorrer esa tabla de resultados para acceder a sus datos. Para eso utilizamos el método fetch_assoc()
Ejemplo
$resultado->fetch_assoc()
Cuando el resultado de la consulta es un único registro podemos acceder a sus datos directamente de esta manera
Ejemplo
$consulta = "SELECT nombre, apellido FROM usuarios WHERE id = 2"; $resultado = $conexion->query($consulta); if($consulta->errno) die($consulta->error); // Guardamos el registro en la variable $fila $fila = $resultado->fetch_assoc(); // El resultado de la consulta estarán en nombre y apellido, entonces: $resulNombre = $fila['nombre']; $resulApellido = $fila['apellido'];
Cuando el resultado contiene más de una fila o registro debemos hacer un bucle para recorrerlos
Ejemplo
$consulta = "SELECT * FROM usuarios"; $resultado = $conexion->query($consulta); if($consulta->errno) die($consulta->error); // Ejemplo para imprimir los datos. El bucle recorre todos los registros. while($fila = $resultado->fetch_assoc()) { echo "ID: " . $fila['id'] . ", Nombre: " . $fila['nombre'] . ", Apellido: " . $fila['apellido'] . "<br>"; }
Además del método fetch_assoc(), que utiliza un array asociativo para guardar el resultado de la consulta, podemos utilizar otros como fetch_array(), que utiliza un array indexado, o fetch_object(), que utiliza un array de objetos.
Vamos a ver un ejemplo de estos otros dos métodos
Ejemplo de fetch_array()
while($fila = $resultado->fetch_array()) { echo "ID: " . $fila[0] . ", Nombre: " . $fila[1] . ", Apellido: " . $fila[2] . "<br>"; }
Ejemplo de fetch_object()
class ejemplo { function mostrarDatos() { return $this->id . ", " . $this->nombre . ", " . $this->apellido; } } $consulta = "SELECT * FROM usuario"; $resultado = $conexion->query($consulta); while($fila = $resultado->fetch_object("ejemplo")) { echo $fila->mostrarDatos(); }
Para liberar el resultado de la consulta de la memoria utilizaremos el método free()
Ejemplo
$resultado->free();
Funciones útililes de MYSQLI
- affected_rows
La función affecter_rows devuelve el número de registros afectados en una consulta de tipo DROP, DELETE, CREATE, UPDATE O INSERT.
Ejemplo
$afectados = $resultado->affected_rows;
- num_rows
Devuelve el número de registros que devuelve una consulta SELECT.
Ejemplo
$registros = $resultado->num_rows;
- insert_id
Devuelve el último ID generado al insertar un registro en una tabla que tiene una clave primaria AUTO_INCREMENT
Ejemplo
$ultimaId = $resultado->insert_id;
Desconexión de la base de datos
Para cerrar la conexión y liberar los recursos y la memoria asociada a la conexión utilizamos el método close()
Ejemplo
$conexion->close();
2 ideas sobre “Consultas bases de datos MYSQLi en Php”
Ante todo darte las gracias por este codigo tan limpio y facil de entender. Tanto las consultas, como la ejecucion de cerrar la BD me dan error. Lo cierto es que consigo conectar con la BD, pues me sale el mensaje «La conexión tuvo éxito», pero luego sale el mensaje:
Fatal error: Uncaught Error: Call to undefined method mysqli::mysqli_close() in /var/www/vhosts/…
Si intento hacer una consulta a la tabla que he creado previamente, o quiero hacer un truncate, o lo que sea, siempre muestra el mismo error…
Fatal error: Uncaught Error: Call to a member function exec() on null in /var/www/vhosts
He comprobado que la libreria mysqli está instalada, de hecho conecta a la BD… no se si me falta alguna cosa…
Puede que tengas una versión de php no compatible con mysqli