diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index d7b44bac0881580f5f07ffeb8f5208c2cdb08674..ff3b3dc0cd2dc498b1ca58089037f38c28b1478c 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -307,6 +307,12 @@ function sql_quote($val, $serveur='')
 
 // http://doc.spip.org/@sql_in
 function sql_in($val, $valeurs, $not='', $serveur='') {
+	if (is_array($valeurs)) {
+		$f = sql_serveur('quote', $serveur);
+		$valeurs = join(',', array_map($f, array_unique($valeurs)));
+	} elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
+	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
+
 	$f = sql_serveur('in', $serveur);
 	return $f($val, $valeurs, $not, $serveur);
 }
diff --git a/ecrire/req/mysql.php b/ecrire/req/mysql.php
index a85de287990343e90ae3dcc957ba2b17d3a17f7c..fdfc797803069560b378f46f38f7db51d53cd0d8 100644
--- a/ecrire/req/mysql.php
+++ b/ecrire/req/mysql.php
@@ -562,21 +562,10 @@ function spip_mysql_quote($v)
 	return _q($v);
 }
 
-// pour compatibilite
-function spip_mysql_in($val, $valeurs, $not='', $serveur='') {
-	return calcul_mysql_in($val, $valeurs, $not);
-}
-
 //
 // IN (...) est limite a 255 elements, d'ou cette fonction assistante
 //
-// http://doc.spip.org/@calcul_mysql_in
-function calcul_mysql_in($val, $valeurs, $not='') {
-	if (is_array($valeurs))
-		$valeurs = join(',', array_map('_q', $valeurs));
-	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
-	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
-
+function spip_mysql_in($val, $valeurs, $not='', $serveur='') {
 	$n = $i = 0;
 	$in_sql ="";
 	while ($n = strpos($valeurs, ',', $n+1)) {
@@ -594,6 +583,16 @@ function calcul_mysql_in($val, $valeurs, $not='') {
 	return "($in_sql)";
 }
 
+// pour compatibilite. Ne plus utiliser.
+// http://doc.spip.org/@calcul_mysql_in
+function calcul_mysql_in($val, $valeurs, $not='') {
+	if (is_array($valeurs))
+		$valeurs = join(',', array_map('_q', $valeurs));
+	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
+	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
+	return spip_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)
diff --git a/ecrire/req/pg.php b/ecrire/req/pg.php
index 7e6ac06d690509e2107e7b9c3f3faf22cb8ed807..96a3d402fda35e0e3f3b71103dde2eea14d3ce52 100644
--- a/ecrire/req/pg.php
+++ b/ecrire/req/pg.php
@@ -743,10 +743,6 @@ function spip_pg_in($val, $valeurs, $not='', $serveur) {
 //
 // IN (...) souvent limite a 255  elements, d'ou cette fonction assistante
 //
-	if (is_array($valeurs))
-		$valeurs = join(',', array_map('_q', $valeurs));
-	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
-	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
 	if (strpos($valeurs, "CAST(x'") !== false)
 		return "($val=" . join("OR $val=", explode(',',$valeurs)).')';
 	$n = $i = 0;