Lección 14: Bases de datos

Si no conoces SQL o necesitas un repaso, te recomiendo que pases por mi curso de SQL antes de continuar la lección.

En PHP tenemos diferentes drivers (o conectores) para interactuar con una base de datos. La más popular y segura es PDO (Objeto de Datos de PHP). Es sencilla de utilizar y nos evita problemas de seguridad.

Consultaremos una tabla en MySQL.

// Variables
$hostDB = '127.0.0.1';
$nombreDB = 'ejemplo';
$usuarioDB = 'root';
$contrasenyaDB = '123';
// Conecta con base de datos
$hostPDO = "mysql:host=$hostDB;dbname=$nombreDB;";
$miPDO = new PDO($hostPDO, $usuarioDB, $contrasenyaDB);
// Prepara SELECT
$miConsulta = $miPDO->prepare('SELECT * FROM Escuelas;');
// Ejecuta consulta
$miConsulta->execute();
foreach ($miConsulta as $clave => $valor) {
    echo print_r($valor);
}

Nos devolverá un array por cada fila, duplicando los datos para poder obtenerlos por posición o por el nombre de la columna.

Array
(
    [id] => 1
    [0] => 1
    [school] => Oxford
    [1] => Oxford
    [my_population] => 12345
    [2] => 12345
    [created_at] => 2018-07-31 11:04:04
    [3] => 2018-07-31 11:04:04
)
Array
(
    [id] => 2
    [0] => 2
    [school] => London
    [1] => London
    [my_population] => 76543
    [2] => 76543
    [created_at] => 2018-08-31 10:04:04
    [3] => 2018-08-31 10:04:04
)
...

Veamos como haríamos un INSERT en la tabla alumnos.

// Variables
$hostDB = '127.0.0.1';
$nombreDB = 'ejemplo';
$usuarioDB = 'root';
$contrasenyaDB = '123';
// Conecta con base de datos
$hostPDO = "mysql:host=$hostDB;dbname=$nombreDB;";
$miPDO = new PDO($hostPDO, $usuarioDB, $contrasenyaDB);
// Prepara INSERT
$miInsert = $miPDO->prepare('INSERT INTO alumnos (nombre, email, codigo_postal) VALUES (:nombre, :email, :codigo_postal)');
// Ejecuta INSERT con los datos
$miInsert->execute(
    array(
        'nombre' => 'beethoven',
        'email' => 'beethoven@cuatroestaciones.com',
        'codigo_postal' => '1234' 
    )
);

Los datos se pasan al ejecutar la orden (execute), sustituyendo las claves por los elementos con dos puntos delante. Por ejemplo, tenemos :nombre que será sustituido por beethoven.

Ni se te ocurra sustituir los datos dentro de la sentencia SQL, puedes sufrir una inyección de SQL (un ataque muy común). Para ello usa siempre el array de execute como intermediario. ¡Nunca te fíes del usuario!

Si quisiéramos realizar otras tareas, como UPDATE o DELETE, imitaríamos lo realizado por el INSERT.