
Resumen
En este tutorial se describe el uso de la clase mysqli
en PHP para interactuar con bases de datos MySQL. Se explican los métodos y propiedades principales de la clase mysqli
, incluyendo cómo establecer una conexión, ejecutar consultas, manejar transacciones y cerrar la conexión. También se proporcionan ejemplos de cómo realizar operaciones de manipulación de datos (DML) y consultas SELECT
, así como cómo manipular los registros recuperados. Además, se introduce el uso de sentencias preparadas para evitar la inyección SQL y mejorar la seguridad de las consultas. Por último, se incluyen propiedades adicionales de mysqli
y mysqli_result
que pueden ser útiles para trabajar con bases de datos MySQL.
-
Comprender el uso de la clase
mysqli
en PHP para interactuar con bases de datos MySQL. -
Aprender a establecer una conexión con una base de datos MySQL utilizando la clase
mysqli
. -
Conocer los métodos y propiedades principales de la clase
mysqli
para realizar consultas y manejar transacciones. -
Realizar operaciones de manipulación de datos (DML) y consultas
SELECT
utilizando la clasemysqli
. -
Manipular los registros recuperados de una base de datos MySQL utilizando los métodos
fetch_array()
,fetch_assoc()
yfetch_object()
. -
Utilizar sentencias preparadas para evitar la inyección SQL y mejorar la seguridad de las consultas.
-
Aprender a cerrar la conexión a la base de datos MySQL utilizando el método
close()
. -
Conocer propiedades adicionales de la clase
mysqli
y el objetomysqli_result
que pueden ser útiles para trabajar con bases de datos MySQL.
Tip
|
Disponible el repositorio usado en este tutorial. |
1. La clase mysqli
La clase mysqli
representa la conexión entre PHP y una base de datos MySQL. Proporciona métodos y propiedades para interactuar con la base de datos, realizar consultas y manejar errores. A continuación se describen los métodos y propiedades principales de la clase mysqli
.
1.1. Métodos principales
1.1.1. Constructor
El constructor de la clase mysqli
se utiliza para establecer una conexión con la base de datos MySQL. Recibe como parámetros el nombre del host, el nombre de usuario, la contraseña y el nombre de la base de datos.
$mysqli = new mysqli($host, $username, $password, $database);
if ($mysqli->connect_error) {
die('Error de conexión: ' . $mysqli->connect_error);
}
En este ejemplo, se crea una conexión a una base de datos MySQL utilizando el nombre de host, el nombre de usuario, la contraseña y el nombre de la base de datos. Si la conexión falla, se muestra un mensaje de error.
1.1.2. close()
El método close()
se utiliza para cerrar la conexión con la base de datos MySQL.
$mysqli->close();
1.1.3. query()
El método query()
se utiliza para ejecutar consultas SQL en la base de datos. Devuelve un objeto mysqli_result
para consultas SELECT
o true
/false
para consultas INSERT
, UPDATE
o DELETE
.
$result = $mysqli->query('SELECT * FROM Persona');
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
// Procesar los datos
}
}
En este ejemplo, se ejecuta una consulta SELECT
en la tabla Persona
y se procesan los resultados.
1.1.4. rollback() y commit()
Los métodos rollback()
y commit()
se utilizan para manejar transacciones en la base de datos. rollback()
deshace los cambios realizados en la transacción actual, mientras que commit()
confirma los cambios.
$mysqli->begin_transaction();
$mysqli->query('INSERT INTO Persona (id, nombre, empresa) VALUES (12, "Juan Pérez", "Empresa XYZ")');
$mysqli->query('INSERT INTO Persona (id, nombre, empresa) VALUES (13, "Ana García", "Empresa ABC")');
if ($mysqli->commit()) {
echo 'Transacción completada';
} else {
$mysqli->rollback();
echo 'Error en la transacción';
}
En este ejemplo, se inicia una transacción, se realizan dos inserciones y se confirma la transacción. Si ocurre un error, se deshacen los cambios.
1.2. Propiedades principales
1.2.1. affected_rows
La propiedad affected_rows
devuelve el número de filas afectadas por la última consulta INSERT
, UPDATE
o DELETE
.
$mysqli->query('UPDATE Persona SET nombre = "Carlos López" WHERE id = 12');
echo 'Filas afectadas: ' . $mysqli->affected_rows;
1.2.2. info
La propiedad info
devuelve información sobre la última consulta ejecutada.
$mysqli->query('UPDATE Persona SET nombre = "Carlos López" WHERE id = 12');
echo 'Información: ' . $mysqli->info;
1.2.3. connect_error
La propiedad connect_error
devuelve el error de conexión si la conexión a la base de datos falla.
$mysqli = new mysqli($host, $username, $password, $database);
if ($mysqli->connect_error) {
die('Error de conexión: ' . $mysqli->connect_error);
}
1.2.4. host_info
La propiedad host_info
devuelve información sobre el host de la conexión.
echo 'Información del host: ' . $mysqli->host_info;
En resumen, la clase mysqli
proporciona una interfaz para interactuar con bases de datos MySQL en PHP. Sus métodos y propiedades permiten establecer conexiones, ejecutar consultas, manejar transacciones y obtener información sobre la conexión y las consultas.
2. Conexión al servidor MySQL
Para conectarse a un servidor MySQL utilizando la clase mysqli
, se utiliza el constructor de la clase mysqli
. La sintaxis es la siguiente:
$mysqli = new mysqli(host, usuario, contraseña, baseDeDatos);
2.1. Bases de datos de ejemplo
Para los ejemplos de este tutorial, se utilizará una base de datos de ejemplo que crearemos en MySQL. A continuación se muestra un script SQL para crear la base de datos tutorial_mysqli
y la tabla Persona
:
CREATE DATABASE IF NOT EXISTS tutorial_mysqli;
USE tutorial_mysqli;
CREATE TABLE IF NOT EXISTS Persona (
id INT PRIMARY KEY,
nombre VARCHAR(50),
empresa VARCHAR(50)
);
INSERT INTO Persona VALUES (1, 'Juan Pérez', 'Empresa XYZ');
INSERT INTO Persona VALUES (2, 'María López', 'Empresa ABC');
2.2. Ejemplo de conexión
A continuación se muestra un ejemplo de cómo conectarse a un servidor MySQL utilizando la clase mysqli
. Los valores de conexión son importados de un archivo de configuración config.php
.
config.php
<?php
// Configuración de la base de datos
$db_host = "localhost";
$db_usuario = "root";
$db_contra = "";
$db_nombre = "tutorial_mysqli";
?>
<?php
require 'config.php';
$mysqli = new mysqli($db_host, $db_usuario, $db_contra, $db_nombre);
if ($mysqli->connect_error) {
die('Error de conexión: ' . $mysqli->connect_error);
}
echo "Conectado " . $mysqli->host_info . "<br/>";
En este ejemplo, se crea una conexión a un servidor MySQL en localhost
utilizando el nombre de usuario root
, sin contraseña, y la base de datos tutorial_mysqli
. Si la conexión falla, se muestra un mensaje de error. Si la conexión es exitosa, se muestra un mensaje indicando que se ha conectado al servidor MySQL, junto con la información del host.
3. DML contra la base de datos MySQL
Para realizar operaciones de manipulación de datos (DML) contra una base de datos MySQL utilizando la clase mysqli
, se utiliza el método query()
. Este método permite ejecutar sentencias SQL como INSERT
, UPDATE
, DELETE
y SELECT
.
3.1. Sintaxis
La sintaxis para ejecutar una sentencia SQL utilizando el método query()
es la siguiente:
$mysqli->query(cadenaSQL);
3.2. Ejemplo de INSERT
A continuación se muestra un ejemplo de cómo insertar datos en una tabla utilizando una sentencia INSERT
:
$cadenaSQL = "INSERT INTO Persona VALUES(12, 'Juan Pérez', 'Empresa XYZ')";
$mysqli->query($cadenaSQL);
echo "Filas modificadas: " . $mysqli->affected_rows . "<br/>";
En este ejemplo, se inserta una nueva fila en la tabla Persona
con los valores 12
, 'Juan Pérez'
y Empresa XYZ
. Después de ejecutar la sentencia INSERT
, se muestra el número de filas modificadas utilizando la propiedad affected_rows
.
3.3. Ejemplo de UPDATE
A continuación se muestra un ejemplo de cómo actualizar datos en una tabla utilizando una sentencia UPDATE
:
$cadenaSQL = "UPDATE Persona SET nombre = 'Carlos López' WHERE id = 12";
$mysqli->query($cadenaSQL);
echo "Filas modificadas: " . $mysqli->affected_rows . "<br/>";
En este ejemplo, se actualiza el nombre de la persona con id
igual a 12
a 'Carlos López'
. Después de ejecutar la sentencia UPDATE
, se muestra el número de filas modificadas utilizando la propiedad affected_rows
.
3.4. Ejemplo de DELETE
A continuación se muestra un ejemplo de cómo eliminar datos de una tabla utilizando una sentencia DELETE
:
$cadenaSQL = "DELETE FROM Persona WHERE id = 12";
$mysqli->query($cadenaSQL);
echo "Filas modificadas: " . $mysqli->affected_rows . "<br/>";
En este ejemplo, se elimina la fila de la tabla Persona
con id
igual a 12
. Después de ejecutar la sentencia DELETE
, se muestra el número de filas modificadas utilizando la propiedad affected_rows
.
3.5. Ejemplo de SELECT
A continuación se muestra un ejemplo de cómo recuperar datos de una tabla utilizando una sentencia SELECT
:
$cadenaSQL = "SELECT * FROM Persona";
$result = $mysqli->query($cadenaSQL);
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Nombre: " . $row["nombre"] . " - Empresa: " . $row["empresa"] . "<br/>";
}
} else {
echo "No se encontraron resultados.";
}
En este ejemplo, se recuperan todas las filas de la tabla Persona
. Si se encuentran resultados, se recorren y se muestran los valores de los campos id
, nombre
y empresa
de cada fila. Si no se encuentran resultados, se muestra un mensaje indicando que no se encontraron resultados.
En resumen, el método query()
de la clase mysqli
permite ejecutar sentencias SQL para realizar operaciones de manipulación de datos (DML) en una base de datos MySQL. Utilizando este método, se pueden insertar, actualizar, eliminar y recuperar datos de una tabla.
4. SELECT contra la base de datos MySQL
Para realizar consultas SELECT
contra una base de datos MySQL utilizando la clase mysqli
, se utiliza el método query()
. Este método permite ejecutar sentencias SQL y devuelve un objeto mysqli_result
que contiene el resultado de la consulta.
4.1. Sintaxis
La sintaxis para ejecutar una consulta SELECT
utilizando el método query()
es la siguiente:
$resultado = $mysqli->query(cadenaSQL); // Consulta
Para obtener el número de filas recuperadas por la consulta, se utiliza la propiedad num_rows
del objeto mysqli_result
:
$resultado->num_rows // Nº de filas recuperadas
4.2. Ejemplo de SELECT
A continuación se muestra un ejemplo de cómo realizar una consulta SELECT
y obtener el número de filas recuperadas:
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
echo "Filas recuperadas: " . $resultado->num_rows . "<br/>";
En este ejemplo, se realiza una consulta SELECT
para recuperar todas las filas de la tabla Persona
. Después de ejecutar la consulta, se muestra el número de filas recuperadas utilizando la propiedad num_rows
.
4.3. Tratamiento del result set
El resultado de la consulta SELECT
es devuelto en un result set, que es un objeto mysqli_result
. El result set contiene todas las filas recuperadas por la consulta y debe ser tratado aparte, fila a fila. Para recorrer el result set y obtener los datos de cada fila, se pueden utilizar métodos como fetch_assoc()
, fetch_row()
o fetch_array()
.
A continuación se muestra un ejemplo de cómo tratar el result set utilizando el método fetch_assoc()
:
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
if ($resultado->num_rows > 0) {
while ($fila = $resultado->fetch_assoc()) {
echo "ID: " . $fila["id"] . " - Nombre: " . $fila["nombre"] . " - Empresa: " . $fila["empresa"] . "<br/>";
}
} else {
echo "No se encontraron resultados.";
}
En este ejemplo, se recorre el result set utilizando un bucle while
y el método fetch_assoc()
, que devuelve cada fila como un array asociativo. Se muestran los valores de los campos id
, nombre
y empresa
de cada fila. Si no se encuentran resultados, se muestra un mensaje indicando que no se encontraron resultados.
En resumen, el método query()
de la clase mysqli
permite ejecutar consultas SELECT
para recuperar datos de una base de datos MySQL. El resultado de la consulta es devuelto en un result set, que debe ser tratado aparte, fila a fila, utilizando métodos como fetch_assoc()
, fetch_row()
o fetch_array()
.
5. Manipulación de registros
Para manipular los registros recuperados de una base de datos MySQL utilizando la clase mysqli
, se pueden utilizar los métodos fetch_array()
, fetch_assoc()
y fetch_object()
del objeto mysqli_result
. Estos métodos permiten acceder a los datos de los registros de diferentes formas.
5.1. fetch_array()
El método fetch_array()
devuelve una fila del result set como un array. Los datos son accesibles tanto por índices numéricos como por nombres de campo.
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
while ($fila = $resultado->fetch_array()) {
echo "ID: " . $fila[0] . " - Nombre: " . $fila['nombre'] . " - Empresa: " . $fila[2] . "<br/>";
}
En este ejemplo, se recorre el result set utilizando un bucle while
y el método fetch_array()
. Los datos de cada fila son accesibles tanto por índices numéricos (p.e. $fila[0]
para el campo id
) como por nombres de campo (p.e. $fila['nombre']
para el campo nombre
).
5.2. fetch_assoc()
El método fetch_assoc()
devuelve una fila del result set como un array asociativo. Los datos son accesibles por nombres de campo.
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
while ($fila = $resultado->fetch_assoc()) {
echo "ID: " . $fila["id"] . " - Nombre: " . $fila["nombre"] . " - Empresa: " . $fila["empresa"] . "<br/>";
}
En este ejemplo, se recorre el result set utilizando un bucle while
y el método fetch_assoc()
. Los datos de cada fila son accesibles por nombres de campo (p.e. $fila["id"]
para el campo id
).
5.3. fetch_object()
El método fetch_object()
devuelve una fila del result set como un objeto. Los datos son accesibles por nombres de campo como propiedades del objeto.
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
while ($fila = $resultado->fetch_object()) {
echo "ID: " . $fila->id . " - Nombre: " . $fila->nombre . " - Empresa: " . $fila->empresa . "<br/>";
}
En este ejemplo, se recorre el result set utilizando un bucle while
y el método fetch_object()
. Los datos de cada fila son accesibles por nombres de campo como propiedades del objeto (p.e. $fila→id
para el campo id
).
En resumen, los métodos fetch_array()
, fetch_assoc()
y fetch_object()
de la clase mysqli_result
permiten acceder a los datos de los registros recuperados de una base de datos MySQL de diferentes formas. fetch_array()
devuelve los datos como un array accesible por índices numéricos y nombres de campo, fetch_assoc()
devuelve los datos como un array asociativo accesible por nombres de campo, y fetch_object()
devuelve los datos como un objeto accesible por nombres de campo como propiedades del objeto.
6. Sentencias preparadas para evitar la inyección SQL
Las sentencias preparadas son una técnica eficaz para evitar la inyección SQL. Permiten separar los datos de la consulta SQL, lo que impide que un atacante inserte código SQL malicioso. A continuación se muestran ejemplos de cómo utilizar sentencias preparadas con la clase mysqli
utilizando la tabla Persona
.
6.1. Ejemplo de INSERT
con sentencias preparadas
A continuación se muestra un ejemplo de cómo insertar datos en una tabla utilizando una sentencia INSERT
preparada:
$stmt = $mysqli->prepare("INSERT INTO Persona (id, nombre, empresa) VALUES (?, ?, ?)");
$stmt->bind_param("iss", $id, $nombre, $empresa);
$id = 13;
$nombre = "Ana García";
$empresa = "Empresa ABC";
$stmt->execute();
echo "Filas modificadas: " . $stmt->affected_rows . "<br/>";
En este ejemplo, se prepara una sentencia INSERT
con marcadores de posición ?
. Los valores se enlazan a los marcadores de posición utilizando el método bind_param()
, que toma como argumentos el tipo de datos de los valores (i
para enteros, s
para cadenas) y los valores a enlazar. Después de ejecutar la sentencia preparada, se muestra el número de filas modificadas.
6.2. Ejemplo de UPDATE
con sentencias preparadas
A continuación se muestra un ejemplo de cómo actualizar datos en una tabla utilizando una sentencia UPDATE
preparada:
$stmt = $mysqli->prepare("UPDATE Persona SET nombre = ?, empresa = ? WHERE id = ?");
$stmt->bind_param("ssi", $nombre, $empresa, $id);
$nombre = "Luis Martínez";
$empresa = "Empresa XYZ";
$id = 13;
$stmt->execute();
echo "Filas modificadas: " . $stmt->affected_rows . "<br/>";
En este ejemplo, se prepara una sentencia UPDATE
con marcadores de posición ?
. Los valores se enlazan a los marcadores de posición utilizando el método bind_param()
. Después de ejecutar la sentencia preparada, se muestra el número de filas modificadas.
6.3. Ejemplo de DELETE
con sentencias preparadas
A continuación se muestra un ejemplo de cómo eliminar datos de una tabla utilizando una sentencia DELETE
preparada:
$stmt = $mysqli->prepare("DELETE FROM Persona WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 13;
$stmt->execute();
echo "Filas modificadas: " . $stmt->affected_rows . "<br/>";
En este ejemplo, se prepara una sentencia DELETE
con un marcador de posición ?
. El valor se enlaza al marcador de posición utilizando el método bind_param()
. Después de ejecutar la sentencia preparada, se muestra el número de filas modificadas.
6.4. Ejemplo de SELECT
con sentencias preparadas
A continuación se muestra un ejemplo de cómo recuperar datos de una tabla utilizando una sentencia SELECT
preparada:
$stmt = $mysqli->prepare("SELECT * FROM Persona WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 13;
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
while ($row = $result->fetch_assoc()) {
echo "ID: " . $row["id"] . " - Nombre: " . $row["nombre"] . " - Empresa: " . $row["empresa"] . "<br/>";
}
} else {
echo "No se encontraron resultados.";
}
En este ejemplo, se prepara una sentencia SELECT
con un marcador de posición ?
. El valor se enlaza al marcador de posición utilizando el método bind_param()
. Después de ejecutar la sentencia preparada, se recuperan los resultados utilizando el método get_result()
y se procesan los datos.
En resumen, las sentencias preparadas son una técnica eficaz para evitar la inyección SQL. Permiten separar los datos de la consulta SQL, lo que impide que un atacante inserte código SQL malicioso. Utilizando sentencias preparadas con la clase mysqli
, se pueden realizar operaciones de manipulación de datos (DML) y consultas SELECT
de forma segura y eficiente.
7. Cierre de la conexión
Es importante cerrar la conexión a la base de datos MySQL una vez que se han realizado todas las operaciones necesarias. Esto libera los recursos asociados con la conexión y mejora el rendimiento de la aplicación. Para cerrar la conexión, se utiliza el método close()
de la clase mysqli
.
7.1. Sintaxis
La sintaxis para cerrar la conexión a la base de datos MySQL es la siguiente:
$mysqli->close();
7.2. Ejemplo de cierre de la conexión
A continuación se muestra un ejemplo de cómo cerrar la conexión a la base de datos MySQL:
<?php
require 'config.php';
$mysqli = new mysqli($db_host, $db_usuario, $db_contra, $db_nombre);
if ($mysqli->connect_error) {
die('Error de conexión: ' . $mysqli->connect_error);
}
// Realizar operaciones en la base de datos
// Cerrar la conexión
$mysqli->close();
En este ejemplo, se establece una conexión a una base de datos MySQL, se realizan operaciones en la base de datos y, finalmente, se cierra la conexión utilizando el método close()
.
En resumen, el método close()
de la clase mysqli
permite cerrar la conexión a la base de datos MySQL una vez que se han realizado todas las operaciones necesarias. Esto libera los recursos asociados con la conexión y mejora el rendimiento de la aplicación.
8. Propiedades adicionales de mysqli
y mysqli_result
Además de las propiedades principales mencionadas anteriormente, la clase mysqli
y el objeto mysqli_result
proporcionan propiedades adicionales que pueden ser útiles para trabajar con bases de datos MySQL.
8.1. num_rows
La propiedad num_rows
del objeto mysqli_result
devuelve el número de filas recuperadas por una consulta SELECT
.
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
echo "Filas recuperadas: " . $resultado->num_rows . "<br/>";
En este ejemplo, se realiza una consulta SELECT
para recuperar todas las filas de la tabla Persona
. Después de ejecutar la consulta, se muestra el número de filas recuperadas utilizando la propiedad num_rows
.
8.2. affected_rows
La propiedad affected_rows
de la clase mysqli
devuelve el número de filas afectadas por la última consulta INSERT
, UPDATE
o DELETE
.
$cadenaSQL = "UPDATE Persona SET nombre = 'Carlos López' WHERE id = 12";
$mysqli->query($cadenaSQL);
echo "Filas afectadas: " . $mysqli->affected_rows . "<br/>";
En este ejemplo, se actualiza el nombre de la persona con id
igual a 12
a 'Carlos López'
. Después de ejecutar la sentencia UPDATE
, se muestra el número de filas afectadas utilizando la propiedad affected_rows
.
8.3. field_count
La propiedad field_count
del objeto mysqli_result
devuelve el número de campos recuperados por una consulta SELECT
.
$cadenaSQL = "SELECT * FROM Persona";
$resultado = $mysqli->query($cadenaSQL);
echo "Campos recuperados: " . $resultado->field_count . "<br/>";
En este ejemplo, se realiza una consulta SELECT
para recuperar todas las filas de la tabla Persona
. Después de ejecutar la consulta, se muestra el número de campos recuperados utilizando la propiedad field_count
.
En resumen, las propiedades num_rows
, affected_rows
y field_count
proporcionan información adicional sobre los resultados de las consultas SQL y pueden ser útiles para trabajar con bases de datos MySQL utilizando la clase mysqli
y el objeto mysqli_result
.
9. Ejemplo completo
A continuación se muestra un ejemplo completo que incluye la conexión a la base de datos, la inserción de datos, la actualización de datos, la eliminación de datos, la recuperación de datos y el cierre de la conexión. El ejemplo se hará con sentencias preparadas para evitar la inyección SQL.
config.php
<?php
// Configuración de la base de datos
$db_host = "localhost";
$db_usuario = "root";
$db_contra = "";
$db_nombre = "tutorial_mysqli";
?>
<?php
require 'config.php';
$mysqli = new mysqli($db_host, $db_usuario, $db_contra, $db_nombre);
if ($mysqli->connect_error) {
die('Error de conexión: ' . $mysqli->connect_error);
}
// Insertar datos
$stmt = $mysqli->prepare("INSERT INTO Persona (id, nombre, empresa) VALUES (?, ?, ?)");
$stmt->bind_param("iss", $id, $nombre, $empresa);
$id = 12;
$nombre = "Juan Pérez";
$empresa = "Empresa XYZ";
$stmt->execute();
echo "Filas insertadas: " . $stmt->affected_rows . "<br/>";
// Actualizar datos
$stmt = $mysqli->prepare("UPDATE Persona SET nombre = ?, empresa = ? WHERE id = ?");
$stmt->bind_param("ssi", $nombre, $empresa, $id);
$nombre = "Juan Pérez López";
$empresa = "Empresa XYZ";
$id = 12;
$stmt->execute();
echo "Filas actualizadas: " . $stmt->affected_rows . "<br/>";
// Eliminar datos
$stmt = $mysqli->prepare("DELETE FROM Persona WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 12;
$stmt->execute();
echo "Filas eliminadas: " . $stmt->affected_rows . "<br/>";
// Recuperar datos
$stmt = $mysqli->prepare("SELECT * FROM Persona");
$stmt->execute();
$resultado = $stmt->get_result();
if ($resultado->num_rows > 0) {
while ($fila = $resultado->fetch_assoc()) {
echo "ID: " . $fila["id"] . " - Nombre: " . $fila["nombre"] . " - Empresa: " . $fila["empresa"] . "<br/>";
}
} else {
echo "No se encontraron resultados.";
}
// Cerrar la conexión
$mysqli->close();
La figura siguiente muestra el resultado de la ejecución del ejemplo completo:

10. Conclusiones
En este tutorial se ha descrito el uso de la clase mysqli
en PHP para interactuar con bases de datos MySQL. Se han explicado los métodos y propiedades principales de la clase mysqli
, incluyendo cómo establecer una conexión, ejecutar consultas, manejar transacciones y cerrar la conexión. Se han proporcionado ejemplos de cómo realizar operaciones de manipulación de datos (DML) y consultas SELECT
, así como cómo manipular los registros recuperados. Se ha introducido el uso de sentencias preparadas para evitar la inyección SQL y mejorar la seguridad de las consultas. Además, se han incluido propiedades adicionales de mysqli
y mysqli_result
que pueden ser útiles para trabajar con bases de datos MySQL. La clase mysqli
proporciona una interfaz completa y flexible para interactuar con bases de datos MySQL en PHP, permitiendo realizar consultas, transacciones y manipulación de datos de forma sencilla y eficiente.
Licencia
Licencia CC BY-NC-ND 4.0
Copyright (c) 2025 [Manuel Torres - Departamento de Informática - Universidad de Almería]
Este proyecto está licenciado bajo la Licencia CC BY-NC-ND 4.0. Esto significa que puedes compartir el proyecto siempre que cites al autor, no lo uses para fines comerciales y no realices obras derivadas.