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.
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.
Ej: 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
$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
$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.
if($conexion->errno) die($conexion->error);
-
Consultas DELETE
Las consultas de DELETE (borrar) eliminan una o varias filas de una tabla.
Ejemplo de DELETE
$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 de TRUNCATE
$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 de CREATE
$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 de INSERT
$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 de UPDATE
$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.
$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()
$resultado->fetch_assoc()
Cuando el resultado de la consulta es un único registro podemos acceder a sus datos directamente de esta manera
$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
$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()
$resultado->free();
Funciones útiles 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.
$afectados = $resultado->affected_rows;
-
num_rows
Devuelve el número de registros que devuelve una consulta SELECT.
$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
$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()
$conexion->close();
Si te ha gustado no olvides compartir en redes sociales.
Espero que te haya servido. Cualquier duda deja un comentario. Un saludo
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