eccco questa è una delle ultime versioni che sto utilizzando.. fa un paio di cose sfiziose, poi quando faccio la nuova versione la posto, questo è n'abbozzo ma funziona...
Codice PHP:
<?
@include("db.sql.php"); // includiamo le stringhe sql
class db_driver {
var $connessione = ""; // bool: contiene la connessione corrente
var $richieste = array(); // array: salva tutte le richieste effettuate dal db
var $num_richieste = 0; // int: salva il numero di richieste effettuate dal db
var $query_id = ""; // risorsa: contiene la risorsa corrente, dopo una query
var $record_row = ""; // array: contiene il record, la riga di risultato, corrente
var $sql = array(); // array: contiene le chiamate per il db
var $prefisso = ""; // stringa: eventuale prefisso delle tabelle
function db_driver($connetti=1){
global $SQL, $tbl_prefisso;
// passiamo l'array con le chiamate, se esiste:
if (isset($tbl_prefisso)) $this->prefisso = &$tbl_prefisso;
if (isset($SQL) && is_array($SQL)) $this->sql = &$SQL;
if ($connetti) $this->connect(); // connettiamoci al db se richiesto
}
function connect()
{
global $dbhost, $dbutente, $dbpassword, $dbnome; // parametri connessione
if (!($this->connessione = mydb_connect($dbhost, $dbutente, $dbpassword)))
{
print "<h3>non riesco a connettermi al db</h3>\n";
exit;
}
if (!(mydb_select_db($dbnome, $this->connessione)))
{
print "<h3>non esiste il db: $dbnome</h3>\n";
exit;
}
print_r($this->connessione);
}
/*
bool db_driver::query(string [, array])
La funzione sottopone al db l'interrogazione del primo argomento.
Il secondo argomento (opzionale) è utilizzato per passare alla stringa eventuali valori da valutare nelle where ect.
- i dati sono passati da un array associativo del tipo: dati([campo] => valore, ... )
*/
function query($query="", $dati=array() ){
if (empty($query)) { return FALSE; } // nessuna richiesta
if ($dati) // controllo se sono stati passati dati da inserire
$query = str_replace(array_keys($dati), array_values($dati), $query);
if ($this->prefisso) // sostituisco l'eventuale prefisso
$query = str_replace("tbl_", $this->prefisso, $query);
$this->query_id = mydb_query($query, $this->connessione) // sono stati riscontrati degli errori, li stampo
or die("ops! richiesta fallita: "
."[*]errorno=".mysql_errno()
."[*]error=".mysql_error()
."[*]richiesta=".$query
);
$this->num_richieste++; // aggiungiamo la richiesta al totale
$this->richieste[] = $query; // aggiungiamo anche la stringa richiesta
return $this->query_id; // restituiamo il risultato
}
function fetch_row($query_id = "") {
if ($query_id == "") // passo l'ultima query se non è stata passata
$query_id = $this->query_id;
$this->record_row = mydb_fetch_array($query_id, MYSQL_ASSOC);
return $this->record_row;
}
function fetch_array($query_id=-1,$query_string="") {
// retrieve row
if ($query_id!=-1) {
$this->query_id=$query_id;
}
if ( isset($this->query_id) ) {
$this->record = mysql_fetch_array($this->query_id);
} else {
if ( !empty($query_string) ) {
$this->halt("Invalid query id (".$this->query_id.") on this query: $query_string");
} else {
$this->halt("Invalid query id ".$this->query_id." specified");
}
}
return $this->record;
}
function query_first($query_string = "", $dati = array()){
$query_id = $this->query($query_string, $dati);
$returnarray=$this->fetch_array($query_id, $query_string);
$this->free_result($query_id);
return $returnarray;
}
/*
int db_driver::get_num_rows(void)
La funzione restituisce il numero di record pescati dall'ultima interrogazione effetuata
*/
function get_num_rows() {
return mysql_num_rows($this->query_id);
}
function free_result($query_id = -1) {
if ($query_id != -1) {
$this->query_id=$query_id;
}
return @mysql_free_result($this->query_id);
}
};
?>
la funzione halt puoi personalizzarla x l'errore formattato o darla cos' in echo...
ti ripeto nn è quella che uso io attualmente ma è abbastanza semplice...
nn fa altro che creare un oggetto
Codice PHP:
$db=new db_driver;
al quale riferirti come se parlassi col db direttamente senza interessarti se sotto c'è mysql e co. se un domani cambi politica e ti compri la licenza oracle, questo e solo questo sarà l'unico file da modificare, cambiandogli le chiamate alle funzioni...
ultima nota: nel file che includo passo delle sorte di dsn del tipo
nome_sql->SELECT.....
così le chiamate le fai semplicemente come
Codice PHP:
$db->query("nome_sql");