sql_quote

La fonction sql_quote() sert à protéger du contenu (apostrophes) afin d’éviter toute injection SQL. Cette fonction est très importante et doit être utilisée dès qu’un contenu provient d’une saisie utilisateur. Les fonctions sql_insertq, sql_updateq, sql_replace effectuent automatiquement cette protection pour les données insérées (mais pas pour les autres paramètres comme $where qu’il faut tout de même protéger).

Elle accepte 3 paramètres :

  1. $val est l’expression à protéger,
  2. $serveur,
  3. $type optionnel, est le type de valeur attendu. Peut valoir int pour un entier.

Elle s’utilise comme cela :

$oiseau = sql_quote("L'oiseau");
$champ = sql_quote($champ);
sql_select('colonne', 'table', 'titre=' . sql_quote($titre));
sql_updateq('table', array('colonne'=>'valeur'), 'titre=' . sql_quote($titre));

Lorsqu’un identifiant numérique est attendu, c’est souvent le cas des clés primaires, la protection peut être de simplement appliquer la fonction PHP intval() (La valeur zéro sera retournée si le contenu passé n’est pas numérique) :

$id_table = intval(_request('id_table'));
sql_select('colonne', 'table', 'id_table=' . intval($id));

Exemple

La fonction url_delete() supprime des URLs de la table SQL stockant les URLs des objets éditoriaux de SPIP. Elle protège des chaines avec sql_quote() et utilise intval() sur l’identifiant :

function url_delete($objet, $id_objet, $url=""){
	$where = array(
		"id_objet=" . intval($id_objet),
		"type=" . sql_quote($objet)
	);
	if (strlen($url)) {
		$where[] =  "url=" . sql_quote($url);
	}
	
	sql_delete("spip_urls", $where);
}

Auteur Matthieu Marcillaud Publié le : Mis à jour : 12/03/23

Traductions : English, français