Visualizzazione risultati 1 fino 2 di 2
Like Tree3Likes
  • 3 Post By dreadnaut

Discussione: Accesso al database per sviluppatori pigri

  1. #1
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Lightbulb Accesso al database per sviluppatori pigri

    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)"
    Ultima modifica di dreadnaut : 22-03-2024 alle ore 01.06.34

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,266

    Predefinito

    Non voglio spammare in mille thread, quindi appunto in questo possibili use-case ed esempi per la libreria:

    ## Eliminare riga di una tabella mysql

    - trovare tutti i messaggi per un indirizzo email
    Codice PHP:
    $messaggi = $db->tabella('Animali_abruzzo')->tutti([ 'email' => $email ]);
    - eliminarli
    Codice PHP:
    $risultato = $db->tabella('Animali_abruzzo')->elimina([ 'email' => $email ]);
    Ultima modifica di dreadnaut : 15-04-2024 alle ore 14.54.21

Tags for this Thread

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •