Introducción
MySQL es un sistema de gestión de bases de datos relacional, multihilo y multiusuario. Es la base de datos de código abierto más popular del mundo.
En conjunto con PHP se puede conectar a múltiples bases de datos siendo a su vez el sistema de bases de datos más utilizado con PHP.
MySQL es:
-
Un sistema de base de datos utilizado en la Web
-
Un sistema de base de datos que corre en el servidor
-
Es ideal para pequeñas y grandes aplicaciones
-
Es muy rápido, confiable y fácil de utilizar
-
Soporta SQL estándar
-
Es abierto para descargarse y utilizarse
-
Es desarrollado, distribuido y soportado por Oracle
-
Fue nombrado como la hija del co-fundaor Monty Widenius: My
Los datos en SQL son almacenados en tablas, una tabla es un conjunto de datos relacionados y consiste de columnas y renglones. Las bases de datos son útiles para almacenar
información en categorías.
Queries
Un query es una solicitud o pregunta al manejador de la base de datos. Por medio de un query es posible buscar información específica dentro de la base de datos. Por ejemplo:
SELECT Apellido FROM Empleados
Este query selecciona todos los registros en la columna "Apellido" de la tabla "Empleados".
Un hecho sobre MySQL
Una gran cosa acerca de MySQL es que puede ser utilizada para soportar aplicaciones de bases de datos embebidas, esto podría ocurrir porque muchas personas creen que MySQL
solamente funciona para manejar pequeños y medianos sistemas cuando la realidad es que grandes empresas como Friendster, Yahoo, Facebook y Google la utilizan.
Conectar a una base de datos MySQL con PHP
Se deberá utilizar la función PHP mysqli_connect()
para abrir una conexión al servidor MySQL.
Sintaxis:
mysql_connect(host, username, password, dbname);
Parámetro |
Regla |
Descripción |
host |
Opcional |
Nombre del host o IP |
username |
Opcional |
El nombre de usuario de MySQL |
password |
Opcional |
La contraseña de acceso |
bdname |
Opcional |
La base de datos por defecto a utilizar |
Existen más parámetros en la función pero los mostrados son los más importantes para la conexión. Para más información acerca de la función, véase la documentación oficial
de PHP aquí.
Ejemplo 1. El siguiente código realiza una conexión a una base de datos utilizando la variable de conexión $con
.
<?php
// Crear una conexión
$con = mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
La conexión a una base de datos se cierra automáticamente cuando finaliza un script, pero si se desea cerrar la conexión antes se puede utilizar la función mysqli_close()
.
Ejemplo 2. Cerrando una conexión con una base de datos.
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_close($con);
?>
Crear una Base de Datos
La sentencia CREATE DATABASE
se utiliza para crear una base de datos en MySQL, debe agregarse esta sentencia a la función mysqli_query()
para
ejecutar el comando.
Ejemplo 3. El siguiente ejemplo crea una base de datos llamada my_db
.
<?php
$con=mysqli_connect("example.com","peter","abc123");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Create database
$sql="CREATE DATABASE my_db";
if (mysqli_query($con,$sql)) {
echo "Database my_db created successfully";
} else {
echo "Error creating database: " . mysqli_error($con);
}
?>
Crear una Tabla
La sentencia CREATE TABLE crea una tabla en una base de datos, basta con agregar ésta sentencia en la función mysqli_query()
para ejecutar el comando.
Ejemplo 4. El siguiente ejemplo crea una tabla llamada Personas
con tres columnas: Nombre
, Apellido
y edad
.
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// Create table
$sql="CREATE TABLE Persons(FirstName CHAR(30),LastName CHAR(30),Age INT);";
// Execute query
if (mysqli_query($con,$sql)) {
echo "Table persons created successfully";
} else {
echo "Error creating table: " . mysqli_error($con);
}
?>
Cuando se crean campos tipo CHAR se debe especificar manualmente el tamaño máximo del campo.
Los tipos de dato especifican lo que el campo en la columna dada contendrá. Para más información acerca de los tipos de datos disponibles en MySQL puede
consultarlo aquí.
Llaves primarias y campos de Auto Incremento
Cada tabla en una base de datos debería tener un campo llave. La llave primaria es utilizada para identificar los renglones en la tabla. Cada llave primaria debe ser única
en la tabla, más aún, la llave primaria no puede ser nula dado que el gestor de la base necesita éste valor para localizar un registro.
El siguiente ejemplo establece el campo PID
como la llave primaria de la tabla. La llave es comúnmente un número de identificación, y es comúnmente utilizado con el
parámetro AUTO_INCREMENT
. Éste parámetro incrementa automáticamente el valor del campo en 1 cada vez que se agrega un registro. Para asegurar que la llave primaria no
puede dejarse nula, debe agregarse el parámetro NOT NULL
en el campo.
$sql = "CREATE TABLE Persons (
PID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(PID),
FirstName CHAR(15),
LastName CHAR(15),
Age INT
);";
Insertar datos en una Tabla
La sentencia INSERT INTO
se utiliza para añadir registros en una tabla de una base de datos. Es posible utilizarla de dos formas: la primera no especifica el nombre de la
columna donde el dato será insertado solamente los valores
INSERT INTO table_name
VALUES (value1, value2, value3,...)
y la segunda forma especifica el nombre y el valor que será insertado
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
Anteriormente en un ejemplo se creó una tabla llamada Personas
con tres columnas: Nombre
, Apellido
y Edad
. Utilizaremos la misma
tabla para añadir registros.
Ejemplo 5. Añadir dos registros a la tabla Personas
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Peter', 'Griffin',35);");
mysqli_query($con,"INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('Glenn', 'Quagmire',33);");
mysqli_close($con);
?>
Insertar datos a una base de datos desde un Formulario
A continuación haremos un formulario en HTML que agrega nuevos registros en la tabla Personas
.
Ejemplo 6. Agregar registros a una base de datos desde un formulario HTML
HTML
<html>
<body>
<form action="insert.php" method="post">
Firstname: <input type="text" name="firstname">
Lastname: <input type="text" name="lastname">
Age: <input type="text" name="age">
<input type="submit">
</form>
</body>
</html>
PHP: insert.php
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
// escape variables for security
$firstname = mysqli_real_escape_string($con, $_POST['firstname']);
$lastname = mysqli_real_escape_string($con, $_POST['lastname']);
$age = mysqli_real_escape_string($con, $_POST['age']);
$sql="INSERT INTO Persons (FirstName, LastName, Age)
VALUES ('$firstname', '$lastname', '$age');";
if (!mysqli_query($con,$sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
mysqli_close($con);
?>
En el ejemplo anterior, cuando el usuario presiona el botón Submit
, los datos son enviados al script insert.php
. El script se conecta a la base de
datos y recibe los valores del formulario a través de la variable $_POST
. Posteriormente la función mysqli_query()
ejecuta la sentencia INSERT INTO
y agrega un nuevo registro a la tabla Personas
.
Seleccionar datos en una tabla de una base de datos
La sentencia SELECT
se utiliza para seleccionar datos en una base. Para hacer que PHP ejecute la sentencia debemos utilizar nuevamente la función mysqli_query()
.
Ésta función es utilizada para enviar un query a la conexión con la base de datos MySQL.
Ejemplo 7. Selecciona todos los datos almacenados en la tabla Personas
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons;");
while($row = mysqli_fetch_array($result)) {
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
mysqli_close($con);
?>
Este ejemplo almacena los datos devueltos por la función mysqli_query()
en la variable $result
. Posteriormente se utiliza la función mysql_fetch_array()
para devolver el primer renglón como un arreglo de todos los registros obtenidos. Cada llamada a la función mysqli_fetch_array()
devuelve el siguiente renglón del conjunto
de datos. Para imprimir el valor de cada renglón se utiliza la variable $row ($row[‘FirstName’]
y $row[‘LastName’])
.
Desplegar los resultados en una tabla
El siguiente ejemplo despliega el resultado del query anterior y lo despliega en una tabla HTML.
Ejemplo 8. Desplegar el contenido de una base de datos en una tabla HTML
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons;");
echo "<table border='1'>
<tr>
<th>Firstname</th>
<th>Lastname</th>
</tr>";
while($row = mysqli_fetch_array($result)) {
echo "<tr>";
echo "<td>" . $row['FirstName'] . "</td>";
echo "<td>" . $row['LastName'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysqli_close($con);
?>
La salida del código anterior será similar a esto:
Firstname |
Lastname |
Glenn |
Quagmire |
Peter |
Griffin |
El filtro WHERE
Este filtro sirve para extraer sólo los registros que cumplan con cierto criterio específico.
Sintaxis:
SELECT column_name(s) FROM table_name WHERE column_name operator value
Al igual que en los casos anteriores, se utiliza la función mysqli_query()
. Esta función envía el query a la conexión con la base de datos.
Ejemplo 9. Filtrar resultados con WHERE
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons WHERE FirstName='Peter';");
while($row = mysqli_fetch_array($result)) {
echo $row['FirstName'] . " " . $row['LastName'];
echo "<br>";
}
?>
Ordenar resultados con ORDER BY
La instrucción ORDER BY
se utiliza para ordenar un conjunto de datos, lo hace en orden ascendente por defecto. Si se desea que los resultados se ordenen en forma
decreciente se puede utilizar el parámetro DESC
.
Sintaxis:
SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC
El siguiente ejemplo selecciona todos los datos almacenados en la tabla Personas
y los ordena por la columna Age
.
Ejemplo 10. Ordenar resultados con ORDER BY
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$result = mysqli_query($con,"SELECT * FROM Persons ORDER BY age;");
while($row = mysqli_fetch_array($result)) {
echo $row['FirstName'];
echo " " . $row['LastName'];
echo " " . $row['Age'];
echo "<br>";
}
mysqli_close($con);
?>
Es posible ordenar los resultados por más de una columna. Cuando se ordenan por más de una columna, la segunda es utilizada solamente si los valores de la primera son iguales:
SELECT column_name(s) FROM table_name ORDER BY column1, column2
Cambiar datos en una Base de Datos
La sentencia UPDATE
se utiliza para cambiar el contenido de un registro en una tabla.
Sintaxis:
UPDATE table_name SET column1=value, column2=value2,...
WHERE some_column=some_value
Nótese la posición de la sentencia WHERE
en la sintaxis de UPDATE
, la instrucción WHERE
especifica en cual(es) registro(s) será(n) actualizado(s).
Para que este query se ejecute a través de PHP habrá que utilizar la función mysqli_query()
en la conexión con la base MySQL.
La tabla de ejemplo que hemos creado anteriormente es la siguiente:
FirstName |
LastName |
Age |
Peter |
Grifin |
35 |
Glenn |
Quagmire |
33 |
El código del ejemplo a continuación actualizará datos de la tabla.
Ejemplo 11. Cambiando el contenido de un registro con UPDATE
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"UPDATE Persons SET Age=36
WHERE FirstName='Peter' AND LastName='Griffin';");
mysqli_close($con);
?>
Borrar datos de una Base de Datos
La sentencia DELETE FROM
se utiliza para borrar registros de una tabla en una base de datos.
Sintaxis:
DELETE FROM table_name WHERE some_column = some_value
Nótese que la palabra clave WHERE
es parte de la sintaxis de DELETE
, y sirve para especificar que registro o registros serán borrados. Si se omite la
palabra clave WHERE
, todos los registros de la tabla serán borrados.
El siguiente ejemplo se borran todos los registros en la tabla Persons
cuyo primer nombre sea Griffin
.
Ejemplo 12. Borrar registros de una tabla con DELETE
<?php
$con=mysqli_connect("example.com","peter","abc123","my_db");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
mysqli_query($con,"DELETE FROM Persons WHERE LastName='Griffin';");
mysqli_close($con);
?>