?????????????? ?????????????? ?????????????? ?????????????? PK‘aR\™Gá¯/¯/connect_sql.phpnuW+A„¶ $auth); } $g['authentification'] = $auth; $g['type'] = $type; return $db_ok = $g; } // En cas d'indisponibilite du serveur, eviter de le bombarder if (!defined('_ECRIRE_INSTALL')) { @touch($f); spip_log("Echec connexion serveur $type : host[$host] port[$port] login[$login] base[$db]", $type); } } // Premiere connexion au serveur principal: // retourner le charset donnee par la table principale // mais verifier que le fichier de connexion n'est pas trop vieux // Version courante = 0.7 // La version 0.7 indique un serveur d'authentification comme 8e arg // La version 0.6 indique le prefixe comme 7e arg // La version 0.5 indique le serveur comme 6e arg // // La version 0.0 (non numerotee) doit etre refaite par un admin // les autres fonctionnent toujours, meme si : // - la version 0.1 est moins performante que la 0.2 // - la 0.2 fait un include_ecrire('inc_db_mysql.php3'). // http://doc.spip.org/@spip_connect_main function spip_connect_main($connexion) { if ($GLOBALS['spip_connect_version']< 0.1 AND _DIR_RESTREINT){ include_spip('inc/headers'); redirige_url_ecrire('upgrade', 'reinstall=oui'); } if (!($f = $connexion['select'])) return false; if (!$r = $f('valeur','spip_meta', "nom='charset_sql_connexion'")) return false; if (!($f = $connexion['fetch'])) return false; $r = $f($r); return ($r['valeur'] ? $r['valeur'] : -1); } // compatibilite function spip_connect_ldap($serveur='') { include_spip('auth/ldap'); return auth_ldap_connect($serveur); } // 1 interface de abstract_sql a demenager dans base/abstract_sql a terme // http://doc.spip.org/@_q function _q ($a) { return (is_numeric($a)) ? strval($a) : (!is_array($a) ? ("'" . addslashes($a) . "'") : join(",", array_map('_q', $a))); } // Nommage bizarre des tables d'objets // http://doc.spip.org/@table_objet function table_objet($type) { static $surnoms = null; if (!$type) return; if (!$surnoms){ // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions $surnoms = pipeline('declarer_tables_objets_surnoms', array( 'article' => 'articles', 'auteur' => 'auteurs', 'breve' => 'breves', 'document' => 'documents', 'doc' => 'documents', # pour les modeles 'img' => 'documents', 'emb' => 'documents', 'groupe_mots' => 'groupes_mots', # hum 'groupe_mot' => 'groupes_mots', # hum 'groupe' => 'groupes_mots', # hum (EXPOSE) 'message' => 'messages', 'mot' => 'mots', 'petition' => 'petitions', 'rubrique' => 'rubriques', 'signature' => 'signatures', 'syndic' => 'syndic', 'site' => 'syndic', # hum hum 'syndic_article' => 'syndic_articles', 'type_document' => 'types_documents', # hum 'extension' => 'types_documents' # hum )); } return isset($surnoms[$type]) ? $surnoms[$type] : preg_replace(',ss$,', 's', $type."s"); } // http://doc.spip.org/@table_objet_sql function table_objet_sql($type) { global $table_des_tables; $nom = table_objet($type); include_spip('public/interfaces'); if (isset($table_des_tables[$nom])) { $t = $table_des_tables[$nom]; $nom = 'spip_' . $t; } return $nom ; } // http://doc.spip.org/@id_table_objet function id_table_objet($type,$serveur='') { $type = preg_replace(',^spip_|s$,', '', $type); if ($type == 'type') return 'extension'; else { if (!$type) return; $t = table_objet($type); $trouver_table = charger_fonction('trouver_table', 'base'); $desc = $trouver_table($t,$serveur); return @$desc['key']["PRIMARY KEY"]; } } // http://doc.spip.org/@objet_type function objet_type($table_objet){ static $surnoms = null; if (!$surnoms){ // passer dans un pipeline qui permet aux plugins de declarer leurs exceptions $surnoms = pipeline('declarer_type_surnoms', array()); } // scenario de base // le type est decline a partir du nom de la table en enlevant le prefixe eventuel // et la marque du pluriel $type = preg_replace(',^spip_|s$,', '', $table_objet); if (isset($surnoms[$type])) return $surnoms[$type]; // si le type redonne bien la table c'est bon if ( (table_objet($type)==$table_objet) OR (table_objet_sql($type)==$table_objet)) return $type; // sinon on passe par la cle primaire id_xx pour trouver le type // car le s a la fin est incertain // notamment en cas de pluriel derogatoire // id_jeu/spip_jeux id_journal/spip_journaux qui necessitent tout deux // une declaration jeu => jeux, journal => journaux // dans le pipeline declarer_tables_objets_surnoms $trouver_table = charger_fonction('trouver_table', 'base'); if ($desc = $trouver_table($table_objet) AND isset($desc['key']["PRIMARY KEY"])){ $primary = $desc['key']["PRIMARY KEY"]; $primary = explode(',',$primary); $primary = reset($primary); $type = preg_replace(',^id_,', '', $primary); } // on a fait ce qu'on a pu return $type; } // Recuperer le nom de la table de jointure xxxx sur l'objet yyyy // http://doc.spip.org/@table_jointure function table_jointure($x, $y) { $trouver_table = charger_fonction('trouver_table', 'base'); $xdesc = $trouver_table(table_objet($x)); $ydesc = $trouver_table(table_objet($y)); $tx = $xdesc['table']; $ty = $ydesc['table']; $ix = @$xdesc['key']["PRIMARY KEY"]; $iy = @$ydesc['key']["PRIMARY KEY"]; if ($table = $GLOBALS['tables_jointures'][$ty][$ix]) return $table; if ($table = $GLOBALS['tables_jointures'][$tx][$iy]) return $table; return ''; } // Pour compatibilite. Ne plus utiliser. // http://doc.spip.org/@spip_query function spip_query($query, $serveur='') { global $spip_sql_version; $f = spip_connect_sql($spip_sql_version, 'query', $serveur, true); return function_exists($f) ? $f($query, $serveur) : false; } ?> PK‘aR\÷{™''convert_utf8.phpnuW+A„¶ $champ) { spip_log("demande update charset table $table ($champ)"); spip_query("UPDATE $table SET $champ = CONCAT('', $champ) WHERE $champ NOT LIKE ' $v) { $v2 = unicode_to_utf_8(charset2unicode($v, $charset_source)); if ($v2 != $v) ecrire_meta($c, $v2); } } // http://doc.spip.org/@base_convert_utf8_dist function base_convert_utf8_dist($titre='', $reprise=false) { if (!$titre) return; // anti-testeur automatique // une liste des tables a convertir, avec le champ dans lequel on // indique '' ; on commence par les rubriques sinon // ca fait desordre dans l'interface privee $tables_a_convertir = array( 'spip_rubriques' => 'titre', 'spip_auteurs' => 'nom', 'spip_articles' => 'titre', 'spip_breves' => 'titre', 'spip_documents' => 'titre', 'spip_forum' => 'titre', 'spip_mots' => 'titre', 'spip_groupes_mots' => 'titre', 'spip_petitions' => 'texte', 'spip_signatures' => 'nom_email', 'spip_syndic' => 'nom_site', 'spip_syndic_articles' => 'titre', 'spip_messages' => 'titre' ); if (!$reprise) convert_utf8_init($tables_a_convertir); echo install_debut_html($titre); echo "

", _T('utf8_convert_timeout'), "


\n"; // preparer un fichier de sauvegarde au cas ou // on met 'a' car ca peut demander plusieurs rechargements $f = @fopen(_DIR_TMP.'convert_utf8_backup.sql', 'a'); foreach ($tables_a_convertir as $table => $champ) { convert_table_utf8($f, $table, $champ); } if ($f) fclose($f); echo "

"._T('utf8_convert_termine')."

"; echo "

,"._T('utf8_convert_verifier', array('rep' => joli_repertoire(_DIR_TMP))), '

'; // bouton "retour au site" + redirige_par_entete echo "

", " >> ", _T('icone_retour'),"

", install_fin_html(); } // http://doc.spip.org/@convert_table_utf8 function convert_table_utf8($f, $table, $champ) { echo "
$table   "; $s = spip_query("SELECT * FROM $table WHERE $champ LIKE ' $v) { if ($c == $champ) { preg_match(',^,', $v, $reg); $v = substr($v, strlen($reg[0])); $charset_source = $reg[1]; $query[] = "$c=" . sql_quote($v); } else { if (!is_numeric($v) AND !is_ascii($v)) { // traitement special car donnees serializees if ($c == 'extra') { $query_no_convert .= ", $c=".sql_quote($v); $query_extra = convert_extra($v, $charset_source); } else $query[] = "$c=" . sql_quote($v); } else # pour le backup $query_no_convert .= ", $c=".sql_quote($v); } } $set = join(', ', $query); $where = "$id_champ = ".$t[$id_champ]; // On l'enregistre telle quelle sur le fichier de sauvegarde if ($f) fwrite($f, "UPDATE $table SET $set$query_no_convert" ." WHERE $where;\n" ); // Mais on la transcode // en evitant une double conversion if ($charset_source != 'utf-8') { $query = "UPDATE $table SET " . unicode_to_utf_8(charset2unicode($set, $charset_source)) . $query_extra . " WHERE $where AND $champ LIKE '$val) $extra[$key] = unicode_to_utf_8( charset2unicode($val, $charset_source)); return ", extra=".sql_quote(serialize($extra)); } } ?> PK‘aR\šŒÈ͆U†Uabstract_sql.phpnuW+A„¶ false // http://doc.spip.org/@sql_serveur function sql_serveur($ins_sql='', $serveur='', $continue=false) { return spip_connect_sql(sql_ABSTRACT_VERSION, $ins_sql, $serveur, $continue); } // Demande si un charset est disponible. // http://doc.spip.org/@sql_get_charset function sql_get_charset($charset, $serveur='', $option=true){ // le nom http du charset differe parfois du nom SQL utf-8 ==> utf8 etc. $desc = sql_serveur('', $serveur, true,true); $desc = $desc[sql_ABSTRACT_VERSION]; $c = $desc['charsets'][$charset]; if ($c) { if (function_exists($f=@$desc['get_charset'])) if ($f($c, $serveur, $option!==false)) return $c; } spip_log("SPIP ne connait pas les Charsets disponibles sur le serveur $serveur. Le serveur choisira seul."); return false; } // Regler le codage de connexion // http://doc.spip.org/@sql_set_charset function sql_set_charset($charset,$serveur='', $option=true){ $f = sql_serveur('set_charset', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($charset, $serveur, $option!==false); } // Fonction pour SELECT, retournant la ressource interrogeable par sql_fetch. // Recoit en argument: // - le tableau (ou cha�ne) des champs a` ramener (Select) // - le tableau (ou cha�ne) des tables a` consulter (From) // - le tableau (ou cha�ne) des conditions a` remplir (Where) // - le crite`re de regroupement (Group by) // - le tableau de classement (Order By) // - le crite`re de limite (Limit) // - le tableau des des post-conditions a remplir (Having) // - le serveur sollicite (pour retrouver la connexion) // - option peut avoir 3 valeurs : // false -> ne pas l'executer mais la retourner, // continue -> ne pas echouer en cas de serveur sql indisponible, // autre -> executer la requete. // Le cas "autre" est, pour une requete produite par le compilateur, // un tableau donnnant le contexte afin d'indiquer le lieu de l'erreur au besoin // Retourne false en cas d'erreur, apres l'avoir denoncee. // Les portages doivent retourner la requete elle-meme en cas d'erreur, // afin de disposer du texte brut. // http://doc.spip.org/@sql_select function sql_select ($select = array(), $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { $f = sql_serveur('select', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $debug = (isset($GLOBALS['var_mode']) AND $GLOBALS['var_mode'] == 'debug' ); if (($option !== false) AND !$debug) { $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, is_array($option) ? true : $option); } else { $query = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); if (!$option) return $query; // le debug, c'est pour ce qui a ete produit par le compilateur if (isset($GLOBALS['debug']['aucasou'])) { list($table, $id,) = $GLOBALS['debug']['aucasou']; $nom = $GLOBALS['debug_objets']['courant'] . $id; $GLOBALS['debug_objets']['requete'][$nom] = $query; } $res = $f($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, true); } if (!is_string($res)) return $res; // denoncer l'erreur SQL dans sa version brute spip_sql_erreur($serveur); // idem dans sa version squelette (prefixe des tables non substitue) erreur_squelette(array(sql_errno($serveur), sql_error($serveur), $res), $option); return false; } // Recupere la syntaxe de la requete select sans l'executer // simplement $option = false au lieu de true // http://doc.spip.org/@sql_get_select function sql_get_select($select = array(), $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='') { return sql_select ($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, false); } // Comme ci-dessus, mais ramene seulement et tout de suite le nombre de lignes // Pas de colonne ni de tri a donner donc, et l'argument LIMIT est trompeur // http://doc.spip.org/@sql_countsel function sql_countsel($from = array(), $where = array(), $groupby = array(), $having = array(), $serveur='', $option=true) { $f = sql_serveur('countsel', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($from, $where, $groupby, $having, $serveur, $option!==false); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_alter function sql_alter($q, $serveur='', $option=true) { $f = sql_serveur('alter', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($q, $serveur, $option!==false); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_fetch function sql_fetch($res, $serveur='', $option=true) { $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($res, NULL, $serveur, $option!==false); } function sql_fetch_all($res, $serveur='', $option=true){ $rows = array(); if (!$res) return $rows; $f = sql_serveur('fetch', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return array(); while ($r = $f($res, NULL, $serveur, $option!==false)) $rows[] = $r; sql_free($res, $serveur); return $rows; } function sql_seek($res, $row_number, $serveur='', $option=true) { $f = sql_serveur('seek', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($res, $row_number, $serveur, $option!==false); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_listdbs function sql_listdbs($serveur='', $option=true) { $f = sql_serveur('listdbs', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($serveur); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_selectdb function sql_selectdb($nom, $serveur='', $option=true) { $f = sql_serveur('selectdb', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($nom, $serveur, $option!==false); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_count function sql_count($res, $serveur='', $option=true) { $f = sql_serveur('count', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($res, $serveur, $option!==false); if ($r===false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_free function sql_free($res, $serveur='', $option=true) { $f = sql_serveur('free', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($res); } // Cette fonction ne garantit pas une portabilite totale // ===> lui preferer la suivante. // Elle est fournie pour permettre l'actualisation de vieux codes // par un Sed brutal qui peut donner des resultats provisoirement acceptables // http://doc.spip.org/@sql_insert function sql_insert($table, $noms, $valeurs, $desc=array(), $serveur='', $option=true) { $f = sql_serveur('insert', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $noms, $valeurs, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_insertq function sql_insertq($table, $couples=array(), $desc=array(), $serveur='', $option=true) { $f = sql_serveur('insertq', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $couples, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_insertq_multi function sql_insertq_multi($table, $couples=array(), $desc=array(), $serveur='', $option=true) { $f = sql_serveur('insertq_multi', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $couples, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_update function sql_update($table, $exp, $where='', $desc=array(), $serveur='', $option=true) { $f = sql_serveur('update', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // Update est presque toujours appelee sur des constantes ou des dates // Cette fonction est donc plus utile que la precedente,d'autant qu'elle // permet de gerer les differences de representation des constantes. // http://doc.spip.org/@sql_updateq function sql_updateq($table, $exp, $where='', $desc=array(), $serveur='', $option=true) { $f = sql_serveur('updateq', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $exp, $where, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_delete function sql_delete($table, $where='', $serveur='', $option=true) { $f = sql_serveur('delete', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $where, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_replace function sql_replace($table, $couples, $desc=array(), $serveur='', $option=true) { $f = sql_serveur('replace', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $couples, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_replace_multi function sql_replace_multi($table, $tab_couples, $desc=array(), $serveur='', $option=true) { $f = sql_serveur('replace_multi', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $tab_couples, $desc, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_drop_table function sql_drop_table($table, $exist='', $serveur='', $option=true) { $f = sql_serveur('drop_table', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $exist, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // supprimer une vue sql // http://doc.spip.org/@sql_drop_view function sql_drop_view($table, $exist='', $serveur='', $option=true) { $f = sql_serveur('drop_view', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $exist, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_showbase function sql_showbase($spip=NULL, $serveur='', $option=true) { if ($spip == NULL){ $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0]; $spip = $connexion['prefixe'] . '\_%'; } $f = sql_serveur('showbase', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($spip, $serveur, $option!==false); } function sql_alltable($spip=NULL, $serveur='', $option=true) { $q = sql_showbase($spip, $serveur, $option); $r = array(); if ($q) while ($t = sql_fetch($q, $serveur)) { $r[] = array_shift($t);} return $r; } // http://doc.spip.org/@sql_showtable function sql_showtable($table, $table_spip = false, $serveur='', $option=true) { if ($table_spip){ $connexion = $GLOBALS['connexions'][$serveur ? $serveur : 0]; $prefixe = $connexion['prefixe']; $vraie_table = preg_replace('/^spip/', $prefixe, $table); } else $vraie_table = $table; $f = sql_serveur('showtable', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $f = $f($vraie_table, $serveur, $option!==false); if (!$f) return array(); if (isset($GLOBALS['tables_principales'][$table]['join'])) $f['join'] = $GLOBALS['tables_principales'][$table]['join']; elseif (isset($GLOBALS['tables_auxiliaires'][$table]['join'])) $f['join'] = $GLOBALS['tables_auxiliaires'][$table]['join']; return $f; } // http://doc.spip.org/@sql_create function sql_create($nom, $champs, $cles=array(), $autoinc=false, $temporary=false, $serveur='', $option=true) { $f = sql_serveur('create', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($nom, $champs, $cles, $autoinc, $temporary, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } function sql_create_base($nom, $serveur='', $option=true) { $f = sql_serveur('create_base', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($nom, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // Fonction pour creer une vue // nom : nom de la vue, // select_query : une requete select, idealement cree avec $req = sql_select() // (en mettant $option du sql_select a false pour recuperer la requete) // http://doc.spip.org/@sql_create_view function sql_create_view($nom, $select_query, $serveur='', $option=true) { $f = sql_serveur('create_view', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($nom, $select_query, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_multi function sql_multi($sel, $lang, $serveur='', $option=true) { $f = sql_serveur('multi', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($sel, $lang); } // http://doc.spip.org/@sql_error function sql_error($serveur='') { $f = sql_serveur('error', $serveur, 'continue'); if (!is_string($f) OR !$f) return false; return $f('query inconnue', $serveur); } // http://doc.spip.org/@sql_errno function sql_errno($serveur='') { $f = sql_serveur('errno', $serveur, 'continue'); if (!is_string($f) OR !$f) return false; return $f($serveur); } // http://doc.spip.org/@sql_explain function sql_explain($q, $serveur='', $option=true) { $f = sql_serveur('explain', $serveur, 'continue'); if (!is_string($f) OR !$f) return false; $r = $f($q, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_optimize function sql_optimize($table, $serveur='', $option=true) { $f = sql_serveur('optimize', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // http://doc.spip.org/@sql_repair function sql_repair($table, $serveur='', $option=true) { $f = sql_serveur('repair', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($table, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } // Fonction la plus generale ... et la moins portable // A n'utiliser qu'en derniere extremite // http://doc.spip.org/@sql_query function sql_query($ins, $serveur='', $option=true) { $f = sql_serveur('query', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; $r = $f($ins, $serveur, $option!==false); if ($r === false) spip_sql_erreur($serveur); return $r; } # une composition tellement frequente... // http://doc.spip.org/@sql_fetsel function sql_fetsel($select = array(), $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); if ($option===false) return $q; if (!$q) return array(); $r = sql_fetch($q, $serveur, $option); sql_free($q, $serveur, $option); return $r; } // Retourne le tableau de toutes les lignes d'une requete Select // http://doc.spip.org/@sql_allfetsel function sql_allfetsel($select = array(), $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { $q = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); if ($option===false) return $q; return sql_fetch_all($q, $serveur, $option); } # Retourne l'unique champ demande dans une requete Select a resultat unique // http://doc.spip.org/@sql_getfetsel function sql_getfetsel($select, $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='', $option=true) { if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) $id = $c[1]; elseif (!preg_match('/\W/', $select)) $id = $select; else {$id = 'n'; $select .= ' AS n';} $r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option); if ($option===false) return $r; if (!$r) return NULL; return $r[$id]; } // http://doc.spip.org/@sql_version function sql_version($serveur='', $option=true) { $row = sql_fetsel("version() AS n", '','','','','','',$serveur); return ($row['n']); } // prend une chaine sur l'aphabet hexa // et retourne sa representation numerique: // FF ==> 0xFF en MySQL mais x'FF' en PG // http://doc.spip.org/@sql_hex function sql_hex($val, $serveur='', $option=true) { $f = sql_serveur('hex', $serveur, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($val); } function sql_quote($val, $serveur='', $type='') { $f = sql_serveur('quote', $serveur, true); if (!is_string($f) OR !$f) $f = '_q'; return $f($val, $type); } function sql_date_proche($champ, $interval, $unite, $serveur='', $option=true) { $f = sql_serveur('date_proche', $serveur, true); if (!is_string($f) OR !$f) return false; return $f($champ, $interval, $unite); } function sql_in($val, $valeurs, $not='', $serveur='', $option=true) { if (is_array($valeurs)) { $f = sql_serveur('quote', $serveur, true); if (!is_string($f) OR !$f) return false; $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, $option==='continue' OR $option===false); if (!is_string($f) OR !$f) return false; return $f($val, $valeurs, $not, $serveur, $option!==false); } // Penser a dire dans la description du serveur // s'il accepte les requetes imbriquees afin d'optimiser ca // http://doc.spip.org/@sql_in_select function sql_in_select($in, $select, $from = array(), $where = array(), $groupby = array(), $orderby = array(), $limit = '', $having = array(), $serveur='') { $liste = array(); $res = sql_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur); while ($r = sql_fetch($res)) {$liste[] = array_shift($r);} sql_free($res); return sql_in($in, $liste); } // http://doc.spip.org/@sql_test_int function sql_test_int($type, $serveur='', $option=true) { return (preg_match('/^bigint/i',$type) OR preg_match('/^int/i',$type) OR preg_match('/^tinyint/i',$type)); } // http://doc.spip.org/@sql_test_date function sql_test_date($type, $serveur='', $option=true) { return (preg_match('/^datetime/i',$type) OR preg_match('/^timestamp/i',$type)); } // Cette fonction devrait disparaitre // http://doc.spip.org/@description_table function description_table($nom){ global $tables_principales, $tables_auxiliaires; static $f; include_spip('base/serial'); if (isset($tables_principales[$nom])) return $tables_principales[$nom]; include_spip('base/auxiliaires'); if (isset($tables_auxiliaires[$nom])) return $tables_auxiliaires[$nom]; if (!$f) $f = charger_fonction('trouver_table', 'base'); return $f($nom); } if(!function_exists("ctype_xdigit")){ function ctype_xdigit($string = ""){ return !strlen( trim( $string, "1234567890abcdefABCDEF" ) ); }/* endfunction ctype_xdigit */ }/* endif not function_exists ctype_xdigit */ ?> PK‘aR\½,nÓ index.phpnuW+A„¶X PK‘aR\­Vñ’9,9,auxiliaires.phpnuW+A„¶ "bigint(21) DEFAULT '0' NOT NULL", "email_unique" => "CHAR (3) DEFAULT '' NOT NULL", "site_obli" => "CHAR (3) DEFAULT '' NOT NULL", "site_unique" => "CHAR (3) DEFAULT '' NOT NULL", "message" => "CHAR (3) DEFAULT '' NOT NULL", "texte" => "LONGTEXT DEFAULT '' NOT NULL", "maj" => "TIMESTAMP"); $spip_petitions_key = array( "PRIMARY KEY" => "id_article"); $spip_visites = array( "date" => "DATE NOT NULL", "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", "maj" => "TIMESTAMP"); $spip_visites_key = array( "PRIMARY KEY" => "date"); $spip_visites_articles = array( "date" => "DATE NOT NULL", "id_article" => "int UNSIGNED NOT NULL", "visites" => "int UNSIGNED DEFAULT '0' NOT NULL", "maj" => "TIMESTAMP"); $spip_visites_articles_key = array( "PRIMARY KEY" => "date, id_article"); $spip_resultats = array( "recherche" => "char(16) not null default ''", "id" => "INT UNSIGNED NOT NULL", "points" => "INT UNSIGNED DEFAULT '0' NOT NULL", "maj" => "TIMESTAMP" ); $spip_resultats_key = array( // pas de cle ni index, ca fait des insertions plus rapides et les requetes jointes utilisees en recheche ne sont pas plus lentes ... ); $spip_referers = array( "referer_md5" => "bigint UNSIGNED NOT NULL", "date" => "DATE NOT NULL", "referer" => "VARCHAR (255)", "visites" => "int UNSIGNED NOT NULL", "visites_jour" => "int UNSIGNED NOT NULL", "visites_veille"=> "int UNSIGNED NOT NULL", "maj" => "TIMESTAMP"); $spip_referers_key = array( "PRIMARY KEY" => "referer_md5"); $spip_referers_articles = array( "id_article" => "int UNSIGNED NOT NULL", "referer_md5" => "bigint UNSIGNED NOT NULL", "referer" => "VARCHAR (255) DEFAULT '' NOT NULL", "visites" => "int UNSIGNED NOT NULL", "maj" => "TIMESTAMP"); $spip_referers_articles_key = array( "PRIMARY KEY" => "id_article, referer_md5", "KEY referer_md5" => "referer_md5"); $spip_auteurs_articles = array( "id_auteur" => "bigint(21) DEFAULT '0' NOT NULL", "id_article" => "bigint(21) DEFAULT '0' NOT NULL"); $spip_auteurs_articles_key = array( "PRIMARY KEY" => "id_auteur, id_article", "KEY id_article" => "id_article"); $spip_auteurs_rubriques = array( "id_auteur" => "bigint(21) DEFAULT '0' NOT NULL", "id_rubrique" => "bigint(21) DEFAULT '0' NOT NULL"); $spip_auteurs_rubriques_key = array( "PRIMARY KEY" => "id_auteur, id_rubrique", "KEY id_rubrique" => "id_rubrique"); $spip_auteurs_messages = array( "id_auteur" => "bigint(21) DEFAULT '0' NOT NULL", "id_message" => "bigint(21) DEFAULT '0' NOT NULL", "vu" => "CHAR (3)"); $spip_auteurs_messages_key = array( "PRIMARY KEY" => "id_auteur, id_message", "KEY id_message" => "id_message"); $spip_documents_liens = array( "id_document" => "bigint(21) DEFAULT '0' NOT NULL", "id_objet" => "bigint(21) DEFAULT '0' NOT NULL", "objet" => "VARCHAR (25) DEFAULT '' NOT NULL", "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); $spip_documents_liens_key = array( "PRIMARY KEY" => "id_document,id_objet,objet", "KEY id_document" => "id_document"); /* $spip_documents_articles = array( "id_document" => "bigint(21) DEFAULT '0' NOT NULL", "id_article" => "bigint(21) DEFAULT '0' NOT NULL", "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); $spip_documents_articles_key = array( "PRIMARY KEY" => "id_article, id_document", "KEY id_document" => "id_document"); $spip_documents_rubriques = array( "id_document" => "bigint(21) DEFAULT '0' NOT NULL", "id_rubrique" => "bigint(21) DEFAULT '0' NOT NULL", "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); $spip_documents_rubriques_key = array( "PRIMARY KEY" => "id_rubrique, id_document", "KEY id_document" => "id_document"); $spip_documents_breves = array( "id_document" => "bigint(21) DEFAULT '0' NOT NULL", "id_breve" => "bigint(21) DEFAULT '0' NOT NULL", "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); $spip_documents_breves_key = array( "PRIMARY KEY" => "id_breve, id_document", "KEY id_document" => "id_document"); $spip_documents_forum = array( "id_document" => "bigint(21) DEFAULT '0' NOT NULL", "id_forum" => "bigint(21) DEFAULT '0' NOT NULL", "vu" => "ENUM('non', 'oui') DEFAULT 'non' NOT NULL"); $spip_documents_forum_key = array( "PRIMARY KEY" => "id_forum, id_document", "KEY id_document" => "id_document"); */ $spip_mots_articles = array( "id_mot" => "bigint(21) DEFAULT '0' NOT NULL", "id_article" => "bigint(21) DEFAULT '0' NOT NULL"); $spip_mots_articles_key = array( "PRIMARY KEY" => "id_article, id_mot", "KEY id_mot" => "id_mot"); $spip_mots_breves = ar