MySQL

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:

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);
  ?>