From 0382d7d25c6c46c69ee8a6e8719ff9cf7c302d44 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sun, 30 Dec 2007 19:22:04 +0000 Subject: [PATCH] =?UTF-8?q?D=C3=A9port=20dans=20le=20fonction=20d'abstract?= =?UTF-8?q?ion=20sql=5Fin=20du=20traitement=20des=20cas=20particuliers=20d?= =?UTF-8?q?e=20l'argument=20de=20IN,=20valable=20pour=20tous=20les=20porta?= =?UTF-8?q?ges.=20On=20en=20profite=20pour=20rajouter=20un=20''array=5Funi?= =?UTF-8?q?que''=20dans=20le=20cas=20du=20tableau=20pour=20pr=C3=A9parer?= =?UTF-8?q?=20[10995].=20Toutefois,=20alors=20que=20PHP=20traite=20intuiti?= =?UTF-8?q?vement=20bien=20{{{$x=20.=3D=20'...'}}}=20quand=20{{{$x}}}=20es?= =?UTF-8?q?t=20ind=C3=A9fini,=20il=20d=C3=A9clenche=20une=20erreur=20fatal?= =?UTF-8?q?e=20pour=20{{{$x=20+=3D=20array(...)}}}.=20Autrement=20dit,=20i?= =?UTF-8?q?l=20faut=20produire=20un=20code=20compil=C3=A9=20ne=20g=C3=A9n?= =?UTF-8?q?=C3=A9rant=20pas=20de=20Warning=20si=20l'on=20veut=20=C3=A9vite?= =?UTF-8?q?r=20les=20r=C3=A9p=C3=A9titions=20dans=20le=20IN=20de=20SQL.=20?= =?UTF-8?q?Pour=20plus=20tard.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/base/abstract_sql.php | 6 ++++++ ecrire/req/mysql.php | 23 +++++++++++------------ ecrire/req/pg.php | 4 ---- 3 files changed, 17 insertions(+), 16 deletions(-) diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php index d7b44bac08..ff3b3dc0cd 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 a85de28799..fdfc797803 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 7e6ac06d69..96a3d402fd 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; -- GitLab