Oggi ho avuto mezz'ora di tempo libero e ho ricontrollato un po' di cose che avevo sul pc. Tra le tante anche la classe database che avevo preparato ormai un mese fa circa.
Con questa versione potete connettervi ad un db, ed effettuare più query riciclando una sola connessione.
Come funziona il tutto?
Per prima cosa dovete includere il file con la classe con un
include_once "database.php";
quindi create un nuovo oggetto
$db = new database();
A questo punto non dovete far altro che inizializzare la connessione al database con la chiamata alla funzione openDatabase
if ($db->openDatabase(hostName, dbName, username, password)__FALSE) {
print "impossibile aprire una connessione col db";
exit;
}
Giunti a questo punto siete pronti per lavorare con il db, eseguendo tutte le query che volete, in quanto verrà utilizzata una sola connessione.
La funzione principe per il resto della classe è la setSQL($querySQL,$tag) che vi permette di impostare la query da eseguire sul db.
La setSQL accetta due parametri. Il primo parametro è la query vera e propria da eseguire (potete metterci query di SELECT INSERT UPDATE complesse quanto vi pare). Il secondo parametro $tag serve per poter eseguire più query con la stessa classe.
Supponiamo, per chiarire le cose, che dobbiate fare due query al db, una del tipo
SELECT * FROM elencoUtenti
e una del tipo
SELECT * FROM automobili
Invece di creare due classi database potete sfruttare i tag
define("TAG_UTENTI","u");
define("TAG_AUTO","a");
if ($db->openDatabase(hostName, dbName, username, password)__FALSE) {
print "impossibile aprire una connessione col db";
exit;
}
$db->setSQL(SELECT * FROM elencoUtenti",TAG_UTENTI);
$db->setSQL(SELECT * FROM automobili",TAG_AUTO);
if ($db->executeSQL(TAG_UTENTI)==FALSE) {
print "si è verificato un errore durante l'esecuzione della query: ".$db->getSQL(TAG_UTENTI);
exit;
} else {
while (($dati=$db->fetchAssoc(TAG_UTENTI))!=FALSE) {
print $dati['nick'].'<br />';
}
}
if ($db->executeSQL(TAG_AUTO)==FALSE) {
print "si è verificato un errore durante l'esecuzione della query: ".$db->getSQL(TAG_AUTO);
exit;
} else {
while (($dati=$db->fetchAssoc(TAG_AUTO))!=FALSE) {
print $dati['targa'].'<br />';
}
}
$db->closeDatabase();
Così facendo stampere l'elenco degli utenti e l'elenco delle automobili.
In pratica avete fatto due query sfruttando una sola connessione (e dovrebbe venir comodo quando avete dei limiti al numero di connessioni contemporanee)
Grazie al sistema dei "tag" non c'è un limite vero e proprio al numero di query che potete fare usando una sola classe, basta fare tanti define uno per ogni query
La cosa "comoda" è che potete lavorare sui risultati delle query anche "intrecciando" tra loro le operazioni
Ad esempio (in pseudocodice)
definite il tag1
definite il tag2
inizializzate il db
settate la query con tag1
eseguite la query con tag1
se il risultato è quello aspettato
eseguite la query con tag2
stampate il primo record della query con tag1
stampate il primo record della query con tag2
chiudete il db
Questo può essere ripetuto con N tag diversi
Per la descrizione delle altre funzioni che si trovano nella classe leggere il readme allegato
Spero possa servire a qualcuno.
PS: sarebbero graditi feedback, non perchè voglio sentirmi dire bravo bravo (anche se ovviamente fa sempre piacere), quanto perchè magari qualcuno potrebbe avere idee su qualcosa che si può aggiungere che a me magari non son venute.
E' la classe che uso nei miei siti, e non l'ho realizzata pensando ad un utilizzo universale, percui aggiungo funzioni man mano che mi servono.
Potrei anche aggiungerle su richiesta
PS2: ovviamente la classe è liberamente utilizzabile purchè non a scopo di lucro e con tutte le limitazioni ovvie del caso (della serie che se vi fate un sito che gestisce i conti correnti di milioni di persone e vi perdete i dati non sono responsabile
) E' un pezzo di codice "amatoriale" e come tale deve essere condiderato il suo target di utilizzo