Skip to content
Extraits de code Groupes Projets
Valider 70b7d16a rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Abstraction mysql :

dans sql_insertq et sql_updateq on utilisait spip_mysql_cite en lui passant le type.

Bien que sql_quote puisse prendre le type en argument, lui utilisait toujours _q() ce qui ne donnait pas un resultat equivalent (cas typique de '0001' stocke dans une chaine que _q transforme en 1).
On change donc cela : lorsque le type est fournit a sql_quote, il utilise spip_mysql_cite qui saura faire ce qu'il faut, sinon il s'en remet a _q comme avant, qui fait de son mieux sans rien savoir du format de stockage.
On traite les tableaux par propagation du type, afin de ne rien casse de la compatibilite de sql_quote
parent 355784a9
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -716,9 +716,19 @@ function spip_mysql_hex($v)
return "0x" . $v;
}
function spip_mysql_quote($v, $type='')
{
return ($type === 'int' AND !$v) ? '0' : _q($v);
function spip_mysql_quote($v, $type='') {
if ($type) {
if (!is_array($v))
return spip_mysql_cite($v,$type);
// si c'est un tableau, le parcourir en propageant le type
foreach($v as $k=>$r)
$v[$k] = spip_mysql_quote($r, $type='');
return $v;
}
// si on ne connait pas le type, s'en remettre a _q :
// on ne fera pas mieux
else
return _q($v);
}
function spip_mysql_date_proche($champ, $interval, $unite)
......@@ -770,13 +780,17 @@ function calcul_mysql_in($val, $valeurs, $not='') {
// http://doc.spip.org/@spip_mysql_cite
function spip_mysql_cite($v, $type) {
if (sql_test_date($type) AND preg_match('/^\w+\(/', $v)
OR (sql_test_int($type)
AND (is_numeric($v)
OR (ctype_xdigit(substr($v,2))
AND $v[0]=='0' AND $v[1]=='x'))))
if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
return $v;
else return ("'" . addslashes($v) . "'");
if (sql_test_int($type)) {
if (is_numeric($v) OR (ctype_xdigit(substr($v,2))
AND $v[0]=='0' AND $v[1]=='x'))
return $v;
// si pas numerique, forcer le intval
else
return intval($v);
}
return ("'" . addslashes($v) . "'");
}
// Ces deux fonctions n'ont pas d'equivalent exact PostGres
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter