Cómo comenzar con operaciones CRUD en bases de datos MySQL con PHP
() translation by (you can also view the original English article)
En este artículo vamos a explorar cómo puedes usar una base de datos MySQL para llevar a cabo operaciones CRUD (crear, leer, actualizar y borrar, o create, read, update y delete en inglés) con PHP. Si quieres ponerte a trabajar con conectividad de bases de datos en PHP, este artículo es un gran punto de partida.
Si acabas de iniciar con PHP, probablemente te hayas dado cuenta de que la conectividad de bases de datos es una característica esencial con la que necesitarás familiarizarte tarde o temprano. En la mayoría de los casos, una base de datos es la columna vertebral de cualquier aplicación web y contiene los datos de la misma. Por lo tanto, como desarrollador de PHP necesitarás saber cómo tratar con las operaciones en la base de datos.
En este artículo mantendremos las cosas simples y exploraremos cómo usar las funciones básicas de mysqli. En futuros artículos de esta serie, exploraremos un par de formas diferentes para gestionar la conectividad de las bases de datos.
Hoy revisaremos los fundamentos de la conectividad de bases de datos en PHP, y usaremos la base de datos MySQL como nuestro back-end de base de datos. Echemos un vistazo rápido a lo que vamos a cubrir en este artículo:
- cómo crear una conexión a una base de datos
- cómo seleccionar una base de datos
- cómo insertar y actualizar registros
- cómo obtener registros
- cómo borrar registros
Vamos a suponer que tienes una instalación funcional de PHP y de MySQL, y que conoces los fundamentos de MySQL. Además, debes asegurarte de que la extensión mysqli esté habilitada en tu instalación de PHP, ya que la usaremos para llevar a cabo operaciones en la base de datos MySQL.
Si no estás seguro de la extensión mysqli, puedes revisar usando la función phpinfo()
. En la salida de phpinfo()
puedes verificar si hay una sección titulada mysqli. También deberás ver el encabezado Mysqli Support | enabled (Soporte de Mysqli | habilitado) si la extensión mysqli está habilitada.
También hay una manera fácil de verificar usando la interfaz CLI. Puedes ejecutar el siguiente comando para mostrar todas las extensiones que estén habilitadas en tu instalación de PHP.
1 |
$php -m |
Este debe imprimir una lista de extensiones, y si contiene la palabra clave mysqli significa que dicha extensión está habilitada.
Ahora que estamos listos, vamos a comenzar a crear una conexión a una base de datos.
Cómo establecer una conexión a una base de datos
En esta sección discutiremos cómo puedes establecer una conexión a una base de datos usando la extensión mysqli.
Existen dos formas en las que puedes usar la extensión mysqli, que son por procedimientos y orientada a objetos, pero usaremos la manera por procedimientos en esta publicación para mantener las cosas simples. Si sientes curiosidad acerca de la sintaxis orientada a objetos, hazme llegar tus preguntas en la sección de comentarios y estaré encantado de responderlas.
Primero revisemos la sintaxis de la función mysqli_connect
, que se usa para establecer una conexión con el back-end de MySQL.
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
?>
|
La función mysqli_connect
recibe cuatro argumentos y devuelve el objeto con la conexión si la conexión tuvo éxito. Echemos un vistazo a cada argumento:
-
MYSQL_HOSTNAME
: Este debe ser sustituido con el nombre del host o la dirección IP del servidor MySQL. Si estás trabajando con el servidor de MySQL en tu sistema local, puedes usarlocalhost
o127.0.0.1
. -
MYSQL_USERNAME
: El nombre de usuario de tu usuario de MySQL. -
MYSQL_PASSWORD
: La contraseña de tu usuario de MySQL. -
MYSQL_DATABASE
: La base de datos a la que quieras conectarte.
Después de logar una conexión exitosa, la variable $connection_obj
contiene el objeto de la conexión. Con este objeto estás listo para ejecutar consultas en la base de datos que fue proporcionada en el argumento MYSQL_DATABASE
.
Por otro lado, si la conexión no tiene éxito podemos ejecutar una depuración como se muestra en el siguiente fragmento de código:
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
?>
|
En la siguiente sección veremos cómo puedes seleccionar una base de datos específica usando el objeto de la conexión.
Cómo seleccionar una base de datos
En la sección anterior discutimos cómo establecer la conexión a una base de datos usando la función mysqli_connec
t. En esta sección veremos cómo seleccionar una base de datos una vez que la conexión a MySQL haya sido exitosa.
Desde luego, como ya hemos visto siempre puedes enviar una base de datos en el cuarto argumento de la propia función mysqli_connect
. Pero también hay otra manera en la que puedes hacer esto, en caso de que quieras cambiar una base de datos después de que te hayas conectado a MySQL. Puedes usar la función mysqli_select_db
para seleccionar una base de datos con la que quieras trabajar.
Revisemos el ejemplo discutido en la sección anterior para ver cómo es que puede funcionar.
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
|
10 |
mysqli_select_db($connection_obj, "{MYSQL_DATABASE}"); |
11 |
?>
|
Como puedes ver hemos enviado solamente tres argumentos en la función mysqli_connect
, y eso debe darnos una conexión exitosa a una base de datos. En vez de enviar una base de datos en el cuarto argumento, seleccionamos la base de datos usando la función mysqli_select_db
.
La función mysqli_select_db
recibe dos argumentos: el objeto de conexión y la base de datos a la que quieras conectarte.
Cómo crear (insertar) y actualizar registros
En las secciones anteriores discutimos cómo establecer una conexión con MySQL y seleccionar una base de datos para trabajar con ella. Ahora veremos cómo ejecutar diferentes tipos de consultas en la base de datos seleccionada. Primero veamos cómo insertar y actualizar registros.
Si quieres seguir los ejemplos discutidos en este artículo, necesitarás crear la siguiente tabla de MySQL en tu base de datos. Es la tabla que vamos a usar en todos los ejemplos de ahora en adelante.
1 |
CREATE TABLE `employee` ( |
2 |
`id` int(11) NOT NULL AUTO_INCREMENT, |
3 |
`name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, |
4 |
`email` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, |
5 |
`phone` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL, |
6 |
PRIMARY KEY (`id`) |
7 |
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; |
Ejecutar el comando anterior en tu base de datos de MySQL debe crear la tabla employee
.
Cómo crear registros
Para mantener las cosas simples vamos a inicializar los valores que necesitan ser insertados en la tabla employee al inicio de la secuencia de comandos. Sin embargo, en la mayoría de los casos estos datos provienen de la entrada del usuario en las variables $_POST
enviadas usando un formulario.
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
|
10 |
// initialize variables for the insert query
|
11 |
$name = 'John Smith'; |
12 |
$email = 'john.smith@yahoo.com'; |
13 |
$phone = '541-754-1234'; |
14 |
|
15 |
// prepare the insert query
|
16 |
$query = "INSERT INTO employee(`name`,`email`, `phone`) |
17 |
VALUES ('". mysqli_real_escape_string($connection_obj, $name) ."','". mysqli_real_escape_string($connection_obj, $email) ."','". mysqli_real_escape_string($connection_obj, $phone) ."')"; |
18 |
|
19 |
// run the insert query
|
20 |
mysqli_query($connection_obj, $query); |
21 |
|
22 |
// close the db connection
|
23 |
mysqli_close($connection_obj); |
24 |
?>
|
En la secuencia de comandos anterior primero hemos inicializado las variables que vamos a usar en la consulta insert. A continuación hemos preparado la consulta insert y la hemos asignado a la variable $query
.
Es importante destacar que hemos usado la función mysqli_real_escape_string
para escapar los valores de tipo cadena que vamos a usar en la consulta insert. Debes usar esta función cuando estés trabajando con valores de tipo cadena enviados a través de variables $_POST
. Esto garantiza que tus usuarios no inyecten código malicioso en tus consultas a la base de datos.
Finalmente, ejecutamos la consulta insert usando la función mysqli_query
. La función mysqli_query
se usa para ejecutar una consulta en la base de datos activa. Para terminar, usamos la función mysqli_close
para cerrar la conexión activa.
Cómo actualizar registros
En la sección anterior discutimos cómo puedes insertar nuevos registros en la tabla de MySQL. En esta sección veremos cómo puedes actualizar un registro que ya existe en la tabla.
Voy a asumir que ya existe un registro en la tabla employee, y que el id de ese registro tiene el valor 1. En el siguiente ejemplo vamos a actualizar un registro que tiene un valor de 1 en la columna id.
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
|
10 |
// initialize variables for the insert query
|
11 |
$id = 1; |
12 |
$phone = '333-555-4444'; |
13 |
|
14 |
// prepare the insert query
|
15 |
$query = "UPDATE employee SET `phone` = '". mysqli_real_escape_string($connection_obj, $phone) ."' WHERE `id` = '". (int) $id ."'"; |
16 |
|
17 |
// run the insert query
|
18 |
mysqli_query($connection_obj, $query); |
19 |
|
20 |
// close the db connection
|
21 |
mysqli_close($connection_obj); |
22 |
?>
|
Como puedes ver en el ejemplo anterior, queremos actualizar la columna phone
de la tabla employee
en donde id
es igual a 1. Esto es muy similar a la consulta insert, pero estamos usando UPDATE
en vez de INSERT
.
Cómo obtener registros
Hasta ahora hemos discutido cómo insertar y actualizar registros en la tabla de MySQL. En esta sección veremos cómo obtener (recuperar) registros de la tabla de MySQL.
Echa un vistazo al siguiente ejemplo:
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
|
10 |
// prepare the select query
|
11 |
$query = "SELECT * FROM employee"; |
12 |
|
13 |
// execute the select query
|
14 |
$result = mysqli_query($connection_obj, $query) or die(mysqli_error($connection_obj)); |
15 |
|
16 |
// run the select query
|
17 |
while ($row = mysqli_fetch_array($result, MYSQLI_BOTH)) { |
18 |
echo "ID:" . $row['id'] . "<br/>"; |
19 |
echo "Name:" . $row['name'] . "<br/>"; |
20 |
echo "Phone:" . $row['phone'] . "<br/>"; |
21 |
echo "Email:" . $row['email'] . "<br/>"; |
22 |
echo "<br/>"; |
23 |
}
|
24 |
|
25 |
// close the db connection
|
26 |
mysqli_close($connection_obj); |
27 |
?>
|
Lo primero que debes hacer para recuperar registros de una base de datos es ejecutar la consulta select usando la función mysqli_query
. Después de haber ejecutado con éxito la consulta select, la función mysqli_query
devuelve el objeto mysqli result
, y eso es lo que hemos almacenado arriba en la variable $result
.
A continuación recorremos el conjunto de resultados usando la función mysqli_fetch_array
en un bucle while. La función mysqli_fetch_array
obtiene una sola fila a la vez del conjunto de mysqli result.
La función mysqli_fetch_array
recibe dos argumentos: el objeto de los resultados y el tipo de los resultados. El tipo indica qué tipo de arreglo será devuelto por la función mysqli_fetch_array
. Puede ser numérico, asociativo o ambos. Es un argumento opcional, y puedes enviar uno de estos tres valores: MYSQLI_ASSOC
, MYSQLI_NUM
o MYSQLI_BOTH
. MYSQLI_ASSOC
indica que quieres acceder a las columnas por sus nombres, y MYSQLI_NUM
indica que quieres acceder a las columnas por sus números.
Si envías el valor MYSQLI_NUM
en el segundo argumento de la función mysqli_fetch_array
, puedes acceder a las columnas como $row[0]
, $row[1]
y así sucesivamente. En nuestro caso hemos enviado el valor MYSQLI_BOTH
, de manera que podemos acceder a las columnas de las dos formas. Si quieres acceder solamente con valores asociativos, en vez de esto puedes usar la función mysqli_fetch_assoc
.
En la siguiente y última sección veremos cómo borrar registros de una base de datos.
Cómo borrar registros
En esta sección veremos cómo borrar registros de una base de datos.
Revisa el siguiente ejemplo.
1 |
<?php
|
2 |
$connection_obj = mysqli_connect("{MYSQL_HOSTNAME}", "{MYSQL_USERNAME}", "{MYSQL_PASSWORD}", "{MYSQL_DATABASE}"); |
3 |
|
4 |
if (!$connection_obj) { |
5 |
echo "Error No: " . mysqli_connect_errno(); |
6 |
echo "Error Description: " . mysqli_connect_error(); |
7 |
exit; |
8 |
}
|
9 |
|
10 |
// initialize variables for the delete query
|
11 |
$id = 1; |
12 |
|
13 |
// prepare the insert query
|
14 |
$query = "DELETE FROM employee WHERE `id` = '". (int) $id ."'"; |
15 |
|
16 |
// run the delete query
|
17 |
mysqli_query($connection_obj, $query); |
18 |
|
19 |
// close the db connection
|
20 |
mysqli_close($connection_obj); |
21 |
?>
|
Como puedes ver, funciona básicamente de la misma manera en la que lo hacen las consultas insert y update. La función mysqli_query
ejecuta la consulta DELETE
, y esta eventualmente elimina el registro de la tabla employee
.
Conclusión
En este artículo exploramos la manera en la que puedes usar la base de datos MySQL con PHP. Este artículo tiene como propósito brindar conocimientos básicos sobre la conectividad a las bases de datos de MySQL con PHP para principiantes. Vimos como ir desde la configuración de una conexión a una base de datos hasta la ejecución de diferentes tipos de consultas.
Siéntete en la libertad de publicar tus comentarios y consultas usando el siguiente espacio.