Usa PDO (PHP Data Objects) per connetterti al tuo database MySQL. Questo metodo assicurerà che tutto l'input del database venga sempre trattato come stringhe di testo e non dovrai mai eseguire l'escape manuale.
Questo combinato con l'uso corretto di html_entities() per visualizzare i dati da da il tuo database è un modo solido e valido per proteggere la tua pagina dall'iniezione. Uso sempre PDO per gestire tutte le mie connessioni al database nei miei progetti.
Crea oggetto database (e in questo caso applica una certa codifica dei caratteri):
try {
$db = new PDO("mysql:host=[hostname];dbname=[database]",'[username]','[password]');
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES utf8");
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$db->exec('SET NAMES utf8');
} catch (PDOException $e) {
echo $e->getMessage();
}
Quindi usalo in questo modo:
$id = 1;
$q = $db->prepare('SELECT * FROM Table WHERE id = ?');
$q->execute(array($id));
$row = $q->fetch();
echo $row['Column_1'];
o
$q = $db->prepare('UPDATE Table SET Column_1 = ?, Column_2 = ? WHERE id = ?');
$q->execute(array('Value for Column_1','Value for Column_2',$id));
e con caratteri jolly:
$search = 'John';
$q = $db->prepare('SELECT * FROM Table WHERE Column_1 LIKE ?');
$q->execute(array('%'.$search.'%'));
$num = $q->rowCount();
if ($num > 0) {
while ($row = $q->fetch()) {
echo $row['Column_1'];
}
} else {
echo "No hits!";
}
Leggi di più:
Come posso prevenire l'SQL injection in PHP?
Quando *non* utilizzare le istruzioni preparate?
quanto sono sicure le dichiarazioni preparate PDO
http://php.net/manual/en/book.pdo.php