[PHP] Driver MySQL con debug

Ho appena finito di scrivere un driver php per la connessione ad un database mysql. La prima cosa che ho pensato appena finito è: "Cacchio, ma ogni volta lo scrivo da zero, di sana pianta… Vabbéh che ci vogliono 5 minuti, ma che palle!".
Riattivando il cervello dopo un buon caffè mi sono ricordato di avere questo blog ed ho pensato di scriverlo qui a futura memoria.

1 – Dati per accesso e selezione del database
Certi dati è meglio metterli a parte. Un file separato permette all’utente finale (nonchè a voi) di gestire meglio variabili tanto importanti, evitando di andarle a cercare in porzioni di codice che potrebbero apparire oscure.
Create un file chiamato conf.php (o come preferite) e scrivete qualcosa del genere:

<?php
 /*
   Configurazione generale
 */
 
  $dbhost = "localhost";   // 99% you don’t need to change this value
  $dbuser = "root";        // Your MySQL username
  $dbpass = "";            // Your MySQL password
  $dbname = "database";  // The name of the database target
?>

Nello stesso file potrete inserire tutti gli altri parametri di configurazione dell’applicazione.

2- Il driver di connessione
Il driver è molto semplice (create un nuovo file, magari chiamato driver.php):

<?php
 /*
   Driver per connessione a database
   Just MySQL supported for this alpha version
 */
 
  class db{
     var $conn;  
     var $dbsel; 
     var $close;
     var $dbs;
     
     /*Defining the constuctuor to initialize the main variables*/
     function db(){
       require_once(‘conf.php’);
       $this->dbs[‘host’] = $dbhost;
       $this->dbs[‘user’] = $dbuser;
       $this->dbs[‘pass’] = $dbpass;
       $this->dbs[‘dtbs’] = $dbname;
     }

     /*Connectio to the database*/
     function dbconn(){
       if(!$this->conn = mysql_connect($this->dbs[‘host’], $this->dbs[‘user’], $this->dbs[‘pass’])){
         echo "Not Connected";
         exit;
       }

       $this->seldb($this->dbs[‘dtbs’]);
     }

     /*Select the database*/
     function seldb($database){
       if(!$this->dbsel = mysql_select_db($database, $this->conn)){
         echo "Database " . $database . " not connected";
         exit;
       }
     }

     /*Close the connection*/
     function conclose(){
       if(!$this->close = mysql_close($this->conn)){
         echo "Unable to close the connection";
         exit;
       }
     }
  }
?>

Il costruttore di classe forse non era necessario, ma sempre meglio trattare le variabili esterne (in questo caso contenute nel file conf.php) come fossero interne alla classe. Il codice risulterà più pulito e la modificalibità futura ne gioverà non poco.

3 – Debug
Semplicemente controlliamo che il driver faccia il suo lavoro! Come noterete il driver ha già di suo dei cicli nelle funzioni che controllano l’avvenuta connessione e la selezione del database.
Ma andiamo oltre, e vediamo se riusciamo ad inserire dei dati nel database, chiudendo successivamente la connessione.

Prima di tutto nel database target creiamo una tabella per il testing. Chiamiamo la tabella ‘test’ eseguedo la query sql che segue:

CREATE TABLE `test` (
  `test1` char(2) NOT NULL default ”,
  `test2` char(2) NOT NULL default ”,
  `test3` char(2) NOT NULL default ”,
  `test4` char(2) NOT NULL default ”,
  `test5` char(2) NOT NULL default ”
) ENGINE=MyISAM

Creiamo un nuovo file, chiamandolo debug.php. Ed al suo interno scriviamo:

<?php
include_once(‘driver.php’);
$test = new db;
$test->dbconn();

if(@mysql_query("INSERT INTO test VALUES(‘1’, ‘1’, ‘1’, ‘1’, ‘1’)")){
    echo "Inserita la prima query";
  }else{
    echo "NON HO inserito la prima query";
  }
 
$test->conclose();

if(@mysql_query("INSERT INTO test VALUES(‘1’, ‘1’, ‘1’, ‘1’, ‘1’)")){
    echo "<br />Inserita la seconda query";
  }else{
    echo "<br />NON HO inserito la seconda query";
  }
?>

Cosa andiamo a fare? Sfruttando il driver di connessione cerchiamo di eseguira una prima query che inserirà una fila di cinque 1 in altrettanti campi della tabella test. Dopo di che chiudiamo la connessione al database e proviamo a rieseguire la stessa query.
Se il driver ha funzionato correttamente, la seconda query non verrà eseguita e il browser stamperà a video:

Inserita la prima query
NON HO inserito la seconda query

Finito : - ) .

Ci vediamo stasera con i siculi che parteciperanno alla Trinacria Blogger Dinner!

2 thoughts on “[PHP] Driver MySQL con debug”

  1. Il vantaggio è in applicazioni più complesse.

    Puoi mandare in loading le variabili necessarie con una sola chiamata che avvia l'array.

    In alternativa dovresti fare tante regole per ogni variabile, e ad ognuna applicare gli stessi filtri di controllo in tempi diversi.

Comments are closed.