olivthill | Quand on utilise SQL, il faut, en effet, remplacer les apostrophes simples dans les chaines de caractères par deux apostrophes qui se suivent. C'est la norme SQL.
On peut aussi remplacer l'apostrophe par autre chose que par deux apostrophes successives, mais alors, lors de la lecture, il faudra faire le remplacement inverse. Avec le remplacement par deux apostrophes, il n'est pas nécessaire de faire le remplacement inverse lors de la lecture.
Donc, personnellement, je me suis créé une fonction que j'appelle systématiquement pour remplacer les apostrophes simples, et aussi pour faire un peu de ménage, quand j'utilise une chaine de caractères dans une clause where ou dans un Insert.
// ====================================================================
// Conversion d'une chaine, remplacant une apostrophe par deux apostrophes
// in: $s1 = " Aujourd'hui "
// out: "Aujourd''hui"
// ====================================================================
function apo($s1)
{
$s1 = trim($s1); // enleve les espaces autour
$s1 = trim($s1, "\xA0" ); // enleve les nbsp
$s1 = stripslashes($s1); // enleve les slashs avant les apostrophes, etc.
$s1 = str_replace("'", "''", $s1); // remplace les guillemets
// supprime les caractères non imprimables (null, tab, backspace, ...)
$s2 = "";
for ($i = 0; $i < strlen($s1); $i++) {
$c = substr($s1, $i, 1);
if (ord($c) >= 32)
$s2 .= $c;
}
return($s2);
}
// ====================================================================
// ====================================================================
...
dbq = "Insert into Ma_table(code_toto, libelle_toto)"
." values ('".$code_toto."', " '".apo($libelle_toto)."')";
...
|
|