Usare un database non è una cosa da niente. Ci sono un sacco di dettagli a cui prestare attenzione: query, parametri, sicurezza, prestazioni. Fare tutto a mano richiede sbattimento, oppure una libreria. Ma la maggior parte delle librerie tanto potenti quando eccessive per un piccolo progetto, ed ostiche per un principiante.
Pensando questa cosa ieri sera, ho messo giù pigroSql, una libreria minima che riduce lo sforzo di interagire con un database. Dovrebbe essere compatibile sia con MySQL che con SQLite.
Su GitHub sta prendendo forma la documentazione. Ma per darvi un'idea:
1. aggiungete PigroSql.php al vostro progetto
2. prendete ispirazione da questo esempio
Codice PHP:
<?php
require 'PigroSql.php';
$db = Pigro\Database::mysqlAltervista('dreadnaut');
$db->esegui("
CREATE TABLE IF NOT EXISTS `articoli` (
titolo VARCHAR(200) NOT NULL,
autore VARCHAR(50) NOT NULL,
slug VARCHAR(200) NOT NULL,
data_creazione DATETIME NOT NULL
)
");
$articoli = $db->tabella('articoli');
$articoli->inserisci([
'titolo' => 'Una nuova libreria',
'autore' => 'dreadnaut',
'slug' => 'nuova-libreria',
'data_creazione' => new DateTime,
]);
$recenti = $articoli->tutti(orderBy: 'data_creazione DESC', limit: 5);
foreach ($recenti as $articolo) {
?>
<article>
<h1><?= htmlspecialchars($articolo['titolo']) ?></h1>
<a href="/articoli/<?= $articolo['slug'] ?>">Leggi...</a>
</article>
<?php
}
# 'Prepared statements' senza sforzo
$questoAnno = $db->tutti('SELECT * FROM `articoli` WHERE YEAR(data_creazione) = ?', date('Y'));
$diDreadnautQuestoAnno = $db->tutti(
'SELECT * FROM `articoli` WHERE autore = ? AND YEAR(data_creazione) = ?',
[ 'dreadnaut', date('Y') ]
);
# alternativamente
$diDreadnautQuestoAnno = $db->tutti(
'SELECT * FROM `articoli` WHERE autore = :autore AND YEAR(data_creazione) = :anno',
[ 'autore' => 'dreadnaut', 'anno' => date('Y') ]
);
$articoli->elimina([ 'slug' => 'nuova-libreria' ]);
$db->esegui('DROP TABLE `articoli`');
Per le operazioni più comuni e semplici: $db->tabella(...)->...
Per query più complesse: $db->...
Per tutto il resto, si più accedere alle le funzioni PDO con $db->pdo->...
Dettagli interessanti:
- Converte automaticamente DateTime e DateTimeImmutable nel formato corretto per il database
- Permette di usare IN nelle query con facilità:
Codice PHP:
$commenti = $db->tabella('commenti')->tutti([ 'id' => 1 ]);
# esegue "SELECT * FROM `commenti` WHERE `id` = 1"
$commenti = $db->tabella('commenti')->tutti([ 'id' => [ 1, 3, 7 ] ]);
# esegue "SELECT * FROM `commenti` WHERE `id` IN (1, 3, 7)"