/** * Exec de la page de destruction des tables de SPIP **/ function exec_base_delete_all_dist() { include_spip('inc/autoriser'); if (!autoriser('detruire')) { include_spip('inc/minipres'); echo minipres(); } else { include_spip('base/dump'); $res = base_lister_toutes_tables('', array(), array(), true); if (!$res) { include_spip('inc/minipres'); spip_log("Erreur base de donnees"); echo minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>"); } else { $res = base_saisie_tables('delete', $res); include_spip('inc/headers'); $res = "\n<ol style='text-align:left'><li>\n" . join("</li>\n<li>", $res) . '</li></ol>'; $admin = charger_fonction('admin', 'inc'); $res = $admin('delete_all', _T('titre_page_delete_all'), $res); if (!$res) { redirige_url_ecrire('install', ''); } else { echo $res; } } } }
function sql_errorno($link = null) { $result = sql_error(); $resultno = sql_errno(); $result = $resultno . ": " . $result; return $result; }
function trace_query_end($query, $start, $result, $erreur, $serveur=''){ if ($start) trace_query_chrono($start, microtime(), $query, $result, $serveur); // tracer les erreurs, sauf pour select, c'est fait dans abstract_sql if ($erreur AND !preg_match('/^select\b/i', $query)) erreur_squelette(array(sql_errno($serveur), $erreur, $query)); return $result; }
/** * Action de réparation de la base de données * * Tente de réparer les tables, recalcule les héritages et secteurs * de rubriques. Affiche les erreurs s'il y en a eu. * * @pipeline_appel base_admin_repair * @uses admin_repair_tables() * @uses calculer_rubriques() * @uses propager_les_secteurs() * * @param string $titre Inutilisé * @param string $reprise Inutilisé **/ function base_repair_dist($titre = '', $reprise = '') { $res = admin_repair_tables(); if (!$res) { $res = "<div class='error'>" . _T('avis_erreur_mysql') . ' ' . sql_errno() . ': ' . sql_error() . "</div>\n"; } else { include_spip('inc/rubriques'); calculer_rubriques(); propager_les_secteurs(); } include_spip('inc/minipres'); $res .= pipeline('base_admin_repair', $res); echo minipres(_T('texte_tentative_recuperation'), $res . generer_form_ecrire('accueil', '', '', _T('public:accueil_site'))); }
function sql_errorno($link = null) { if (isset($link)) { $result = sql_error($link); $resultno = sql_errno($link); } if (!isset($link)) { $result = sql_error(); $resultno = sql_errno(); } if ($result == "" && $result === 0) { return ""; } if ($result != "" && $result !== 0) { $result = $resultno . ": " . $result; } return $result; }
/** * fonction appliquee par ecrire/index sur le resultat de la precedente * en cas de refus de connexion. * Retourne un message a afficher ou redirige illico. * * @param $raison * @return array|string */ function auth_echec($raison) { include_spip('inc/minipres'); include_spip('inc/headers'); // pas authentifie. Pourquoi ? if (is_string($raison)) { // redirection vers une page d'authentification // on ne revient pas de cette fonction // sauf si pb de header $raison = redirige_formulaire($raison); } elseif (is_int($raison)) { // erreur SQL a afficher $raison = minipres(_T('info_travaux_titre'), _T('titre_probleme_technique') . "<p><tt>" . sql_errno() . " " . sql_error() . "</tt></p>"); } elseif (@$raison['statut']) { // un simple visiteur n'a pas acces a l'espace prive spip_log("connexion refusee a " . @$raison['id_auteur']); $raison = minipres(_T('avis_erreur_connexion'), _T('avis_erreur_visiteur')); } else { // auteur en fin de droits ... $h = $raison['site']; $raison = minipres(_T('avis_erreur_connexion'), "<br /><br /><p>" . _T('texte_inc_auth_1', array('auth_login' => $raison['login'])) . " <a href='{$h}'>" . _T('texte_inc_auth_2') . "</a>" . _T('texte_inc_auth_3')); } return $raison; }
function base_admin_repair_dist($titre='', $reprise='') { $f = sql_repair('repair', NULL, true); if ($f) { $res = admin_repair_tables(); } else { if ($titre) spip_log("Pas d'instruction REPAIR dans ce serveur SQL"); $res = ' '; } if (!$res) { $res = "<br /><br /><span style='color: red; font-weight: bold;'><tt>"._T('avis_erreur_mysql').' '.sql_errno().': '.sql_error() ."</tt></span><br /><br /><br />\n"; } else { include_spip('inc/rubriques'); calculer_rubriques(); propager_les_secteurs(); } include_spip('inc/minipres'); $res .= pipeline('base_admin_repair',$res); $res .= admin_repair_plat(); echo minipres(_T('texte_tentative_recuperation'), $res . generer_form_ecrire('accueil', '','',_T('public:accueil_site'))); }
/** * Effectue une requête de selection * * Fonction de selection (SELECT), retournant la ressource interrogeable par sql_fetch. * * @api * @see sql_fetch() Pour boucler sur les resultats de cette fonction * * @param array|string $select * Liste des champs a recuperer (Select) * @param array|string $from * Tables a consulter (From) * @param array|string $where * Conditions a remplir (Where) * @param array|string $groupby * Critere de regroupement (Group by) * @param array|string $orderby * Tableau de classement (Order By) * @param string $limit * Critere de limite (Limit) * @param array $having * Tableau des des post-conditions a remplir (Having) * @param string $serveur * Le serveur sollicite (pour retrouver la connexion) * @param bool|string $option * Peut avoir 3 valeurs : * * - false -> ne pas l'exécuter mais la retourner, * - continue -> ne pas echouer en cas de serveur sql indisponible, * - true|array -> executer la requête. * Le cas array est, pour une requete produite par le compilateur, * un tableau donnnant le contexte afin d'indiquer le lieu de l'erreur au besoin * * * @return mixed * Ressource SQL * * - Ressource SQL pour sql_fetch, si la requete est correcte * - false en cas d'erreur * - Chaine contenant la requete avec $option=false * * 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. * **/ 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 = (defined('_VAR_MODE') and _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); } // en cas d'erreur 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) $contexte_compil = sql_error_backtrace(true); erreur_squelette(array(sql_errno($serveur), sql_error($serveur), $res), $contexte_compil); return false; }
function spip_sql_erreur($serveur = '') { $connexion = spip_connect($serveur); $e = sql_errno($serveur); $t = isset($connexion['type']) ? $connexion['type'] : 'sql'; $m = "Erreur {$e} de {$t}: " . sql_error($serveur) . "\n" . $connexion['last']; $f = $t . $serveur; spip_log($m, $f . '.' . _LOG_ERREUR); }
function spiplistes_sqlerror_log ($trace = '') { if($trace) $trace = " ($trace) "; spiplistes_log('DB ERROR'.$trace.": [" . sql_errno() . "] " . sql_error()); return(true); }
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; }
function spip_sql_erreur($serveur='') { $connexion = spip_connect($serveur); $e = sql_errno($serveur); $t = (isset($connexion['type']) ? $connexion['type'] : 'sql'); $m = "Erreur $e de $t: " . sql_error($serveur) . "\n" . $connexion['last']; $f = $t . $serveur; spip_log($m, $f); }
function set_var($key, $val) { global $db; if (!isset($this->old_vars[$key])) { if (!($result = $db->sql_query('ALTER TABLE ' . CONFIG_TABLE . ' ADD vars_' . $key . ' VARCHAR(255) NOT NULL', false) && sql_errno() != 1064)) { sql_error(true, 'ALTER TABLE ' . CONFIG_TABLE . ' ADD vars_' . $key . ' VARCHAR(255) NOT NULL'); } } if (!isset($this->vars[$key]) || $this->vars[$key] != $val) { $this->vars[$key] = $val; } $this->old_vars[$key] = $val; if (is_numeric($val)) { $this->updates['vars_' . $key] = 'vars_' . $key . ' = ' . $val; } elseif (is_array($val) || is_object($val)) { $this->updates['vars_' . $key] = 'vars_' . $key . ' = \'' . quotes(serialize($val)) . '\''; } else { $this->updates['vars_' . $key] = 'vars_' . $key . ' = \'' . quotes($val) . '\''; } }