Lección 14: Bases de datos | Curso PHP 8.x

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();
// Imprimo
$resultados = $miConsulta->fetchAll();
foreach ($resultados as $posicion => $columna) {
    echo $columna['nombre'];
}

O usando SQLite.

// Variables
$hostDB = 'mibasededatos.sqlite';
// Conecta con base de datos
$hostPDO = "sqlite:$hostDB";
$miPDO = new PDO($hostPDO);

// Prepara SELECT
$miConsulta = $miPDO->prepare('SELECT * FROM Escuelas;');
// Ejecuta
$miConsulta->execute();

// Volvemos a la tabla
// Imprimo
$resultados = $miConsulta->fetchAll();
foreach ($resultados as $posicion => $columna) {
    echo $columna['nombre'];
}

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
)
...

Para usar SQLite con PHP necesitarás tener instalado el driver. En muchos casos suele ser incluirlo en los entornos de desarrollo como XAMPP o MAMP. En caso contrario, como puede ser el cliente oficial de PHP que estamos usando en el curso, habrá que incluirlo. En Debian y derivados (como Ubuntu) deberás ejecutar: sudo apt install php-sqlite3.

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.

14-1 14-2

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

Comprame un café
Pulsa sobre la imagen

No te sientas obligado a realizar una donación, pero cada aportación mantiene el sitio en activo logrando que continúe existiendo y sea accesible para otras personas. Además me motiva a crear nuevo contenido.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario