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
DBQuery // sottopone la query al databaseCodice 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
Assumendo di dover inserire nome e cognome nei campi dbnome e dbcognome l'inserimento viene fatto in questo modo:Codice PHP:public function DBQuery($sql_query) {
if (!$query = mysql_query ($sql_query)) {
throw new Exception($this->DBError());
}
} // end method DBQuery
Il punto è questo: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();
}
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
P.S. Nel quote riportato qua sopra il backslash non si vede ma c'èINSERT INTO anagrafica (dbnome, dbcognome) VALUES ('Marco', 'D\'Ambrosi')
al contrario se vado a vedere i dati effettivamente inseriti nel database trovo:
La domanda finale è: E' corretto tutto questo o sto sbagliando qualcosa ? Si puiò fare di meglio o sono sulla strada sbagliata ?Marco D'Ambrosi \\ senza il carattere di escape
Grazie a tutti

Rispondi quotando