Scusate, avete ragione. Ma le operazioni sono corrette o manca qualche controllo? Valuterò singolarmente i vostri suggerimenti, per i quali intanto vi ringrazio.
Codice PHP:
<?php
class dbManager {
// Definizione degli Attributi di classe
private $dbh; // Connettore database
private $dbUser; // Utente del database
private $dbPwd; // Password utente
private $dbName; // Nome del database
private $charset; // Charset
private $stat; // Statement per l'esecuzione della query
// Metodo costruttore
public function __construct(){
// Valorizzo i dati per la connessione al database (ESEMPIO)
$this->dbUser = 'xxxx';
$this->dbPwd = 'yyyy';
$this->dbName = 'wwww';
$this->charset = 'zzzz';
$this->dbOpenConn();
}
/*
* **************************************************************
*
* METODI PRIVATI
*
* **************************************************************
*/
// Metodo per connettersi al database
private function dbOpenConn(){
$this->dbh = oci_connect($this->dbUser,$this->dbPwd,$this->dbName,$this->charset);
}
// Metodo per disconnettere il database
private function dbCloseConn(){
oci_close($this->dbh);
}
// Metodo per fare il parsing della query
private function dbParseQuery($query){
$this->stat = oci_parse($this->dbh,$query);
if (!$this->stat){
echo oci_error($this->stat);
exit();
}
}
// Metodo per eseguire la query
private function dbExecuteQuery(){
if (!oci_execute($this->stat)){
echo oci_error($this->stat);
exit();
}
}
// Metodo per il bind delle variabili
private function dbBind($query,$params){
$nomi = array();
$valori = array();
// Recupero i nomi e i valori delle variabili
foreach ($params as $v_name => $v_value){
$nomi[] = $v_name;
$valori[] = $v_value;
}
// Eseguo il bind per ogni coppia nome->valore
for ($i=0;$i<count($nomi);$i++)
oci_bind_by_name($this->stat,$nomi[$i],$valori[$i]);
}
/*
* Metodo per costruire l'array dei risultati in modo numerico.
* Se il risultato è un insieme di record, si ha una matrice avente
* tante righe quanti sono i risultati della query (da 0 a n-1).
* Se il risultato è un solo record invece ritorna un array con i valori
* risultanti
*/
private function dbNumericResult(){
// Uso un contatore per assegnare le righe
$j = 0;
$result = array();
while (oci_fetch($this->stat)){
// Ogni elemento dell'array è un array di posti pari al numero di colonne
// Se ho una sola colonna carico l'array monodimensionale
if (oci_num_fields($this->stat) == 1){
$result[] = oci_result($this->stat,1);
}
// Se ho più di una colonna, uso un array bidimensionale
else{
// Per ogni colonna aggiungo aggiungo il valore ritornato dalla query
for ($i=0;$i<oci_num_fields($this->stat);$i++){
$result[$j][$i] = oci_result($this->stat,$i+1);
}
$j++;
}
}
if (count($result) == 1)
return $result[0];
return $result;
}
/*
* Metodo per costruire l'array associativo dei risultati
* Se il risultato è un insieme di record, si ha una matrice in cui ogni riga
* è rappresentata da un numero e ogni campo dal nome dello stesso. Se invece
* si ha un unico record, il metodo ritorna un array associativo.
*/
private function dbAssociativeResult(){
$result = array();
// Se seleziono una sola colonna ottengo un array numerico
if (oci_num_fields($this->stat) == 1)
while (oci_fetch($this->stat))
$result[] = oci_result($this->stat,1);
else{
while ($result[] = oci_fetch_array($this->stat,OCI_ASSOC)){}
/* L'ultima assegnazione è vuota perchè la condizione non si verifica
* quindi tolgo l'ultimo elemento dall'array, altrimenti se ne conta
* uno in più
*/
unset($result[count($result)-1]);
}
if (count($result) == 1)
return $result[0];
return $result;
}
/*
* **************************************************************
*
* METODI PUBBLICI
*
* **************************************************************
*/
// Metodo per eseguire insert o update
public function querySqlInsUpDel($query){
// Parsing della query SQL
$this->dbParseQuery($query);
// Esecuzione della query
$this->dbExecuteQuery();
return;
}
// Metodo per eseguire insert o update con bind
public function querySqlBindInsUpDel($query,$params){
// Parsing della query SQL
$this->dbParseQuery($query);
// Bind delle variabili
$this->dbBind($query,$params);
// Esecuzione della query
$this->dbExecuteQuery();
return;
}
/*
* Metodo per eseguire query sql
*
* note: questo metodo effettua la query e ritorna un array numerico monodimensionale
* se si è selezionato un solo attributo, e un array numerico bidimensionale
* se si è selezionato un insieme di attributi.
*/
public function querySql($query){
// Parsing della query SQL
$this->dbParseQuery($query);
// Esecuzione della query
$this->dbExecuteQuery();
// Costruisco l'array dei risultati in modo numerico
$result = $this->dbNumericResult();
// L'array (monodimensionale o multidimensionale) è caricato
return $result;
}
/*
* Metodo per eseguire query sql con ritorno di un array associativo
*
* note: questo metodo effettua la query e ritorna un array monodimensionale
* numerico se si è selezionato un solo attributo, e un array
* bidimensionale numerico/associativo se si è selezionato un insieme
* di attributi.
*/
public function querySqlAssoc($query){
// Parsing della query SQL
$this->dbParseQuery($query);
// Esecuzione della query
$this->dbExecuteQuery();
// Costruisco l'array dei risultati in modo associativo
$result = $this->dbAssociativeResult();
// L'array (monodimensionale o multidimensionale) è caricato
return $result;
}
/*
* Metodo per eseguire query sql con bind di variabili
*
* note: questo metodo effettua la query e ritorna un array numerico monodimensionale
* se si è selezionato un solo attributo, e un array numerico bidimensionale
* se si è selezionato un insieme di attributi.
*/
public function querySqlBind($query,$params){
// Parsing della query SQL
$this->dbParseQuery($query);
// Bind delle variabili
$this->dbBind($query,$params);
// Esecuzione della query
$this->dbExecuteQuery();
// Costruisco l'array dei risultati in modo numerico
$result = $this->dbNumericResult();
// L'array (monodimensionale o multidimensionale) è caricato
return $result;
}
/*
* Metodo per eseguire query sql con ritorno di un array associativo e bind di variabili
*
* note: questo metodo effettua la query e ritorna un array monodimensionale
* numerico se si è selezionato un solo attributo, e un array
* bidimensionale numerico/associativo se si è selezionato un insieme
* di attributi.
*/
public function querySqlAssocBind($query,$params){
// Parsing della query SQL
$this->dbParseQuery($query);
// Bind delle variabili
$this->dbBind($query,$params);
// Esecuzione della query
$this->dbExecuteQuery();
// Costruisco l'array dei risultati in modo numerico
$result = $this->dbAssociativeResult();
// L'array (monodimensionale o multidimensionale) è caricato
return $result;
}
// Metodo distruttore
public function __destruct(){
// Chiudo
$this->dbCloseConn();
}
}