Ciao sto realizzando una classe per la gestione di mysql e ho questo dubbio:

Premesso che i magic_quotes sono impostati a off in php.ini i metodi sono i seguenti:

DBCheck() // aggiunge i caratteri di escape ove necessario
Codice PHP:
public function DBCheck($data) {
            
                
// Se magic_quotes è settato a off non striplashes 
                // non viene usata 
                
if (!get_magic_quotes_gpc()) {
                        if (!
$data stripslashes(trim($data))) {
                        throw new 
Exception($this->DBError());
                        }
                }
                
                
// Se il tipo di dato non è numerico viene usata la funzione 
                // mysql_real_escape_string     
                
if (!is_numeric($data)) {
                        if (!
$data mysql_real_escape_string($data)) {
                        throw new 
Exception($this->DBError());
                        }
                }
                
                return 
$data;
                
        } 
// end method DBCheck 
DBQuery // sottopone la query al database
Codice PHP:
    public function DBQuery($sql_query) {
                if (!
$query mysql_query ($sql_query)) {
                        throw new 
Exception($this->DBError());
                }
        } 
// end method DBQuery 
Assumendo di dover inserire nome e cognome nei campi dbnome e dbcognome l'inserimento viene fatto in questo modo:

Codice PHP:
require ( 'configuration.php' );
require ( 
'dblayer_class.php' );

try {
// Instanzio la classe
$db = new DBLayer ();

$nome $_POST['nome'];
$cognome $_POST['cognome'];

// Preparo la query
$sql_query sprintf ("INSERT INTO anagrafica (dbnome, dbcognome) VALUES ('%s', '%s')",
                 
$nome $db->DBCheck($nome), 
                 
$cognome $db->DBCheck($cognome));

// Stampo la query
echo $sql_query;

// Inserisco i dati nel database
$db->DBQuery($sql_query);
}

catch (
Exception  $e) {      
        
$e->getMessage(); 

Il punto è questo:

Se stampo la query e o nel campo nome o nel campo cognome c'è un apostrofo questo viene fatto precedere da un carattarre di escape:

Ipotizzando che io mi chiami Marco D'Ambrosi questo è ciò che viene stampato con echo

INSERT INTO anagrafica (dbnome, dbcognome) VALUES ('Marco', 'D\'Ambrosi')
P.S. Nel quote riportato qua sopra il backslash non si vede ma c'è

al contrario se vado a vedere i dati effettivamente inseriti nel database trovo:

Marco D'Ambrosi \\ senza il carattere di escape
La domanda finale è: E' corretto tutto questo o sto sbagliando qualcosa ? Si puiò fare di meglio o sono sulla strada sbagliata ?


Grazie a tutti