Home
Repository 32bit  Forum
Repository 64bit  Wiki

Modifiche

PHP HOWTO - Forms Framework: ffDb Sql

13 byte aggiunti, 11:32, 6 feb 2009
nessun oggetto della modifica
Questo articolo fa parte di una serie di HOW-TO sui componenti di Forms, un framework Open Source sviluppato da Samuele "Nuitari" Diella, un programmatore con esperienza decennale nel ramo dello sviluppo web.
Nella fattispecie, cFormsDb_Sql ffDb_Sql è la classe preposta alla gestione della connessione ai database di tipo SQL, largamente utilizzata in tutto il framework ma utilizzabile separatamente in qualsiasi progetto.
In questo articolo verrà trattata la versione MySQL.
=Come Ottenerla=
E' possibile scaricare la classe da questo indirizzo: http://www.formsframeworknoveanelli.orgcom/cFormsDb_Sql_mysqlffDb_Sql_mysql.php.tar.gz. Per utilizzarla è sufficiente scompattare il file e posizionarlo in un qualsiasi punto del sito, a patto che sia raggiungibile con una direttiva di php "require" od "include"
=Sinossi=
* permette un approccio a "cursore" nella programmazione del codice d'accesso ai risultati
* include una funzione di escaping per evitare l'SQL injection
* è perfettamente integrata con l'oggetto cFormsDataffData, parte del framework Forms, il quale permette di gestire in modo del tutto trasparente l'internazionalizzazione e la conversione dei dati
=Istanziazione dell'oggetto=
Il primo imprescindibile passo per poter utilizzare la classe è, ovviamente, crearne un istanza. Se si da un occhiata al file, si potrà notare che a dispetto del nome di quest'ultimo, la classe si chiama "cFormsDb_SqlffDb_Sql" e non "cFormsDb_Sql_mysqlffDb_Sql_mysql". Questa scelta dipende dal fatto che, in questo modo, è possibile semplicemente cambiare l'inclusione del file (ad esempio con cFormsDb_Sql_oracleffDb_Sql_oracle") per cambiare a tutti gli effetti l'engine di connessione al DB senza la necessità di dover riscrivere codice.
Procediamo quindi ad instanziare l'oggetto:
<pre>
$db = new cFormsDB_SqlffDB_Sql();
</pre>
</pre>
Se queste costanti sono presenti, tutti gli oggetti cForms_Db_Sql ff_Db_Sql creati utilizzeranno questi valori di default salvo differenti indicazioni. E' la scelta consigliata per un utilizzo normale della classe.
In genere, è meglio evitare di chiamare esplicitamente il metodo "connect", in favore degli altri due metodi. Il motivo è che il metodo connect esegue esplicitamente una connessione al database, anche se magari non è immediatamente richiesto. Gli altri due metodi permettono di lasciare che sia la classe a decidere quando effettuare la connessione, in modo da risparmiare utili risorse.
* '''tabella''' : palesemente il nome della tabella da cui recuperare il/i valore/i
* '''chiave''' : il campo su cui eseguire il match, può assumere valori differenti a seconda della necessità. Può essere tanto una singola stringa con il nome della chiave su cui si desidera fare il match, quanto un array contenente una serie di coppie chiave/valore per un match multiplo.
* '''valorechiave''' : nel caso in cui ''chiave'' sia una stringa, contiene il valore con cui fare il match. Può essere un oggetto cFormsDataffData.* '''defaultvalue''' : il valore da restituire nel caso in cui la lookup non trovi occorrenze. Può essere lasciato a NULL e può essere un oggetto cFormsDataffData.
* '''nomecampo''' : il campo il cui valore va recuperato, può assumere valori differenti a seconda delle necessità. Può essere tanto una stringa indicante un campo singolo da recuperare, quanto un array contenente un elenco di campi con i rispettivi tipi dati. Nel caso in cui sia un array, la funzione restituirà un array come risultato contente le coppie chiave/valore.
* '''tiporestituito''' : il tipo di dato da restituire nel caso in cui ''nomecampo'' sia una stringa, altrimenti ignorato. Nel caso in cui non si stia usando l'integrazione con Forms Framework, è possibile specificare solo "Text" e "Number".
do
{
echo $db->getResultgetField($i, "contenuto") . "<br />";
} while ($db->nextRecord());
}
=Escaping dei valori=
Come accennato nella parte relativa al metodo execute(), la classe mette a disposizione un metodo per l'escaping dei valori, in modo da evitare qualsiasi possibilità di subire un attacco di SQL injection. Fra le altre cose, questo metodo è integrato con cFormsDataffData, permettendo nel caso lo si utilizzi una conversione automatica dei tipi e dei locale.
Il metodo in questione è toSql(), ed accetta i seguenti parametri:
in dettaglio:
* '''cDataValue''' : il valore di cui effettuare l'escaping. Può essere un oggetto cFormsDataffData.
* '''data_type''' : il tipo di dato. Nel caso non si usi Forms Framework, accetta solo "Text" e "Number". In tal caso, "Text" sarà l'unico tipo soggetto ad escaping.
* '''enclose_field''' : aggiunge i trailing quotes al valore.
Abbiamo analizzato questa semplice ma utile classe per l'accesso ai Database di tipo SQL/MySQL. Tramite di essa è possibile accedere ai database usando l'efficiente paradigma a classi, con una serie di vantaggi che dovrebbero essere risultati evidenti dalla lettura. Per quanto semplice e sicuramente passibile di miglioramenti ed espansione, sono convinto che la sua potenza come strumento possa giustificarne l'adozione al posto della semplice API di PHP e magari fornire lo spunto per ulteriori approfondimenti, dell'argomento o del framework da cui nasce.
 
=Articoli Correlati=
[[PHP HOWTO - Forms Framework: ffTemplate]]
=Credits=
414
contributi