本文整理汇总了PHP中sql_showtable函数的典型用法代码示例。如果您正苦于以下问题:PHP sql_showtable函数的具体用法?PHP sql_showtable怎么用?PHP sql_showtable使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了sql_showtable函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: creer_ou_upgrader_table
/**
* Creer une table,
* ou ajouter les champs manquants si elle existe deja
*
* http://doc.spip.org/@creer_ou_upgrader_table
*
* @param string $table
* @param array $desc
* @param bool|string $autoinc
* 'auto' pour detecter automatiquement si le champ doit etre autoinc ou non
* en fonction de la table
* @param bool $upgrade
* @param string $serveur
* @return void
*/
function creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade = false, $serveur = '')
{
$sql_desc = $upgrade ? sql_showtable($table, true, $serveur) : false;
if (!$sql_desc) {
if ($autoinc === 'auto') {
$autoinc = base_determine_autoinc($table, $desc);
}
sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
} else {
// ajouter les champs manquants
// on ne supprime jamais les champs, car c'est dangereux
// c'est toujours a faire manuellement
$last = '';
foreach ($desc['field'] as $field => $type) {
if (!isset($sql_desc['field'][$field])) {
sql_alter("TABLE {$table} ADD {$field} {$type}" . ($last ? " AFTER {$last}" : ""), $serveur);
}
$last = $field;
}
foreach ($desc['key'] as $key => $type) {
// Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees
// par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY"
if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["{$key} {$type}"])) {
sql_alter("TABLE {$table} ADD {$key} ({$type})", $serveur);
}
$last = $field;
}
}
}
示例2: dump_afficher_tables_restaurees_erreurs
function dump_afficher_tables_restaurees_erreurs($status_file)
{
$status = dump_lire_status($status_file);
$tables = $status['tables_copiees'];
$corps = "";
$erreurs = array();
if (!$tables) {
return "<p>" . _T("dump:erreur_aucune_donnee_restauree") . "</p>";
}
// lister les tables copiees aller verifier dans la base
// qu'on a le bon nombre de donnees
foreach ($tables as $t => $n) {
if (!sql_showtable($t, true) or $n === 0) {
$erreurs[$t] = _T('dump:erreur_table_absente', array('table' => "<strong>{$t}</strong>"));
} else {
$n = abs(intval($n));
$n_dump = intval(sql_countsel($t));
if ($n_dump < $n) {
$erreurs[$t] = _T('dump:erreur_table_donnees_manquantes', array('table' => "<strong>{$t}</strong>"));
}
}
}
if (count($erreurs)) {
$corps = "<ul class='spip'><li>" . implode("</li><li class='spip'>", $erreurs) . "</li></ul>";
}
return $corps;
}
示例3: maj_11778
function maj_11778()
{
// si presence id_type
$s = sql_showtable('spip_types_documents');
if (isset($s['field']['id_type'])) {
sql_alter('TABLE spip_types_documents CHANGE id_type id_type BIGINT(21) NOT NULL');
sql_alter('TABLE spip_types_documents DROP id_type');
sql_alter('TABLE spip_types_documents ADD PRIMARY KEY (extension)');
}
}
示例4: accesrestreint_upgrade
/**
* Fonction d'installation, mise a jour de la base
*
* @param unknown_type $nom_meta_base_version
* @param unknown_type $version_cible
*/
function accesrestreint_upgrade($nom_meta_base_version,$version_cible){
$current_version = 0.0;
if ( (!isset($GLOBALS['meta'][$nom_meta_base_version]) )
|| (($current_version = $GLOBALS['meta'][$nom_meta_base_version])!=$version_cible)){
include_spip('base/acces_restreint');
if (version_compare($current_version,'0.0','<=')){
include_spip('base/create');
include_spip('base/abstract_sql');
creer_base();
// ajout des champs publique/privee si pas existants
$desc = sql_showtable("spip_zones", true);
if (!isset($desc['field']['publique']))
sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
if (!isset($desc['field']['privee']))
sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
echo "AccesRestreint Install<br/>";
effacer_meta($nom_meta_base_version); // salade de majuscules
ecrire_meta($nom_meta_base_version,$current_version=$version_cible,'non');
}
if (version_compare($current_version,'0.2','<')){
include_spip('base/create');
include_spip('base/abstract_sql');
// ajout des champs publique/privee si pas existants
$desc = sql_showtable("spip_zones", true);
if (!isset($desc['field']['publique']))
sql_alter("TABLE spip_zones ADD publique ENUM('non', 'oui') DEFAULT 'oui' NOT NULL AFTER descriptif");
if (!isset($desc['field']['privee']))
sql_alter("TABLE spip_zones ADD privee ENUM('non', 'oui') DEFAULT 'non' NOT NULL AFTER publique");
echo "AccesRestreint@0.2<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.2','non');
}
if (version_compare($current_version,'0.3','<')){
sql_alter("TABLE `zones_auteurs` DROP INDEX `id_zone`");
sql_alter("TABLE `zones_auteurs` ADD PRIMARY KEY ( `id_zone` , `id_auteur` )");
sql_alter("TABLE `zones_rubriques` DROP INDEX `id_zone`");
sql_alter("TABLE `zones_rubriques` ADD PRIMARY KEY ( `id_zone` , `id_rubrique` )");
echo "AccesRestreint@0.3<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3','non');
}
if (version_compare($current_version,'0.3.0.1','<')){
#ecrire_meta('creer_htaccess','oui');
echo "AccesRestreint@0.3.0.1<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3.0.1','non');
}
if (version_compare($current_version,'0.3.0.2','<')){
#ecrire_meta('creer_htaccess','oui');
sql_alter("TABLE spip_zone ALTER titre SET DEFAULT ''");
sql_alter("TABLE spip_zone ALTER descriptif SET DEFAULT ''");
echo "AccesRestreint@0.3.0.2<br />";
ecrire_meta($nom_meta_base_version,$current_version='0.3.0.2','non');
}
}
}
示例5: creer_ou_upgrader_table
/**
* Créer une table,
* ou ajouter les champs manquants si elle existe déjà
*
* @param string $table
* @param array $desc
* @param bool|string $autoinc
* 'auto' pour detecter automatiquement si le champ doit etre autoinc ou non
* en fonction de la table
* @param bool $upgrade
* @param string $serveur
* @return void
*/
function creer_ou_upgrader_table($table, $desc, $autoinc, $upgrade = false, $serveur = '')
{
#spip_log("creer_ou_upgrader_table table=$table autoinc=$autoinc upgrade=$upgrade","dbinstall"._LOG_INFO_IMPORTANTE);
$sql_desc = $upgrade ? sql_showtable($table, true, $serveur) : false;
#if (!$sql_desc) $sql_desc = false;
#spip_log("table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
if (!$sql_desc) {
if ($autoinc === 'auto') {
$autoinc = base_determine_autoinc($table, $desc);
}
#spip_log("sql_create $table autoinc=$autoinc","dbinstall"._LOG_INFO_IMPORTANTE);
sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
// verifier la bonne installation de la table (php-fpm es-tu la ?)
$sql_desc = sql_showtable($table, true, $serveur);
#if (!$sql_desc) $sql_desc = false;
#spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
if (!$sql_desc) {
// on retente avec un sleep ?
sleep(1);
sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
$sql_desc = sql_showtable($table, true, $serveur);
#if (!$sql_desc) $sql_desc = false;
#spip_log("Resultat table=$table sql_desc:$sql_desc","dbinstall"._LOG_INFO_IMPORTANTE);
if (!$sql_desc) {
spip_log("Echec creation table {$table}", "maj" . _LOG_CRITIQUE);
}
}
} else {
#spip_log("sql_alter $table ... (on s'en fiche)","dbinstall"._LOG_INFO_IMPORTANTE);
// ajouter les champs manquants
// on ne supprime jamais les champs, car c'est dangereux
// c'est toujours a faire manuellement
$last = '';
foreach ($desc['field'] as $field => $type) {
if (!isset($sql_desc['field'][$field])) {
sql_alter("TABLE {$table} ADD {$field} {$type}" . ($last ? " AFTER {$last}" : ""), $serveur);
}
$last = $field;
}
foreach ($desc['key'] as $key => $type) {
// Ne pas oublier les cas des cles non nommees dans la declaration et qui sont retournees
// par le showtable sous la forme d'un index de tableau "KEY $type" et non "KEY"
if (!isset($sql_desc['key'][$key]) and !isset($sql_desc['key']["{$key} {$type}"])) {
sql_alter("TABLE {$table} ADD {$key} ({$type})", $serveur);
}
$last = $field;
}
}
}
示例6: creer_ou_upgrader_table
function creer_ou_upgrader_table($table,$desc,$autoinc,$upgrade=false,$serveur='') {
$sql_desc = $upgrade ? sql_showtable($table,true,$serveur) : false;
if (!$sql_desc)
sql_create($table, $desc['field'], $desc['key'], $autoinc, false, $serveur);
else {
// ajouter les champs manquants
$last = '';
foreach($desc['field'] as $field=>$type){
if (!isset($sql_desc['field'][$field]))
sql_alter("TABLE $table ADD $field $type".($last?" AFTER $last":""),$serveur);
$last = $field;
}
foreach($desc['key'] as $key=>$type){
if (!isset($sql_desc['key'][$key]))
sql_alter("TABLE $table ADD $key ($type)",$serveur);
$last = $field;
}
}
}
示例7: spip_connect
function spip_connect($serveur = '', $version = '')
{
global $connexions, $spip_sql_version;
$serveur = !is_string($serveur) ? '' : strtolower($serveur);
$index = $serveur ? $serveur : 0;
if (!$version) {
$version = $spip_sql_version;
}
if (isset($connexions[$index][$version])) {
return $connexions[$index];
}
include_spip('base/abstract_sql');
$install = _request('exec') == 'install';
// Premiere connexion ?
if (!($old = isset($connexions[$index]))) {
$f = !preg_match('/^[\\w\\.]*$/', $serveur) ? '' : ($serveur ? _DIR_CONNECT . $serveur . '.php' : (_FILE_CONNECT ? _FILE_CONNECT : ($install ? _FILE_CONNECT_TMP : '')));
// installation pas faite
unset($GLOBALS['db_ok']);
unset($GLOBALS['spip_connect_version']);
if ($f) {
if (is_readable($f)) {
include $f;
} elseif ($serveur and !$install) {
// chercher une declaration de serveur dans le path
// qui pourra un jour servir a declarer des bases sqlite
// par des plugins. Et sert aussi aux boucles POUR.
find_in_path("{$serveur}.php", 'connect/', true);
}
}
if (!isset($GLOBALS['db_ok'])) {
// fera mieux la prochaine fois
if ($install) {
return false;
}
if ($f and is_readable($f)) {
spip_log("spip_connect: fichier de connexion '{$f}' OK.", _LOG_INFO_IMPORTANTE);
} else {
spip_log("spip_connect: fichier de connexion '{$f}' non trouve", _LOG_INFO_IMPORTANTE);
}
spip_log("spip_connect: echec connexion ou serveur {$index} mal defini dans '{$f}'.", _LOG_HS);
// ne plus reessayer si ce n'est pas l'install
return $connexions[$index] = false;
}
$connexions[$index] = $GLOBALS['db_ok'];
}
// si la connexion a deja ete tentee mais a echoue, le dire!
if (!$connexions[$index]) {
return false;
}
// la connexion a reussi ou etait deja faite.
// chargement de la version du jeu de fonctions
// si pas dans le fichier par defaut
$type = $GLOBALS['db_ok']['type'];
$jeu = 'spip_' . $type . '_functions_' . $version;
if (!isset($GLOBALS[$jeu])) {
if (!find_in_path($type . '_' . $version . '.php', 'req/', true)) {
spip_log("spip_connect: serveur {$index} version '{$version}' non defini pour '{$type}'", _LOG_HS);
// ne plus reessayer
return $connexions[$index][$version] = array();
}
}
$connexions[$index][$version] = $GLOBALS[$jeu];
if ($old) {
return $connexions[$index];
}
$connexions[$index]['spip_connect_version'] = isset($GLOBALS['spip_connect_version']) ? $GLOBALS['spip_connect_version'] : 0;
// initialisation de l'alphabet utilise dans les connexions SQL
// si l'installation l'a determine.
// Celui du serveur principal l'impose aux serveurs secondaires
// s'ils le connaissent
if (!$serveur) {
$charset = spip_connect_main($GLOBALS[$jeu]);
if (!$charset) {
unset($connexions[$index]);
spip_log("spip_connect: absence de charset", _LOG_AVERTISSEMENT);
return false;
}
} else {
// spip_meta n'existe pas toujours dans la base
// C'est le cas d'un dump sqlite par exemple
if ($connexions[$index]['spip_connect_version'] and sql_showtable('spip_meta', true, $serveur) and $r = sql_getfetsel('valeur', 'spip_meta', "nom='charset_sql_connexion'", '', '', '', '', $serveur)) {
$charset = $r;
} else {
$charset = -1;
}
}
if ($charset != -1) {
$f = $GLOBALS[$jeu]['set_charset'];
if (function_exists($f)) {
$f($charset, $serveur);
}
}
return $connexions[$index];
}
示例8: install_etape_3b_dist
function install_etape_3b_dist()
{
$login = _request('login');
$email = _request('email');
$nom = _request('nom');
$pass = _request('pass');
$pass_verif = _request('pass_verif');
$server_db = defined('_INSTALL_SERVER_DB') ? _INSTALL_SERVER_DB : _request('server_db');
if (!defined('_PASS_LONGUEUR_MINI')) {
define('_PASS_LONGUEUR_MINI', 6);
}
if (!defined('_LOGIN_TROP_COURT')) {
define('_LOGIN_TROP_COURT', 4);
}
if ($login) {
$echec = $pass != $pass_verif ? _T('info_passes_identiques') : (strlen($pass) < _PASS_LONGUEUR_MINI ? _T('info_passe_trop_court_car_pluriel', array('nb' => _PASS_LONGUEUR_MINI)) : (strlen($login) < _LOGIN_TROP_COURT ? _T('info_login_trop_court') : ''));
include_spip('inc/filtres');
if (!$echec and $email and !email_valide($email)) {
$echec = _T('form_email_non_valide');
}
if ($echec) {
echo minipres('AUTO', info_progression_etape(3, 'etape_', 'install/', true) . "<div class='error'><h3>{$echec}</h3>\n" . "<p>" . _T('avis_connexion_echec_2') . "</p>" . "</div>");
exit;
}
}
if (@file_exists(_FILE_CHMOD_TMP)) {
include _FILE_CHMOD_TMP;
} else {
redirige_url_ecrire('install');
}
if (!@file_exists(_FILE_CONNECT_TMP)) {
redirige_url_ecrire('install');
}
# maintenant on connait le vrai charset du site s'il est deja configure
# sinon par defaut lire_meta reglera _DEFAULT_CHARSET
# (les donnees arrivent de toute facon postees en _DEFAULT_CHARSET)
lire_metas();
if ($login) {
include_spip('inc/charsets');
$nom = importer_charset($nom, _DEFAULT_CHARSET);
$login = importer_charset($login, _DEFAULT_CHARSET);
$email = importer_charset($email, _DEFAULT_CHARSET);
# pour le passwd, bizarrement il faut le convertir comme s'il avait
# ete tape en iso-8859-1 ; car c'est en fait ce que voit md5.js
$pass = unicode2charset(utf_8_to_unicode($pass), 'iso-8859-1');
include_spip('auth/sha256.inc');
include_spip('inc/acces');
$htpass = generer_htpass($pass);
$alea_actuel = creer_uniqid();
$alea_futur = creer_uniqid();
$shapass = _nano_sha256($alea_actuel . $pass);
// prelablement, creer le champ webmestre si il n'existe pas (install neuve
// sur une vieille base
$t = sql_showtable("spip_auteurs", true);
if (!isset($t['field']['webmestre'])) {
@sql_alter("TABLE spip_auteurs ADD webmestre varchar(3) DEFAULT 'non' NOT NULL");
}
$id_auteur = sql_getfetsel("id_auteur", "spip_auteurs", "login=" . sql_quote($login));
if ($id_auteur !== null) {
sql_updateq('spip_auteurs', array("nom" => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'htpass' => $htpass, 'statut' => '0minirezo'), "id_auteur={$id_auteur}");
} else {
$id_auteur = sql_insertq('spip_auteurs', array('nom' => $nom, 'email' => $email, 'login' => $login, 'pass' => $shapass, 'htpass' => $htpass, 'alea_actuel' => $alea_actuel, 'alea_futur' => $alea_futur, 'statut' => '0minirezo'));
}
// le passer webmestre separrement du reste, au cas ou l'alter n'aurait pas fonctionne
@sql_updateq('spip_auteurs', array('webmestre' => 'oui'), "id_auteur={$id_auteur}");
// inserer email comme email webmaster principal
// (sauf s'il est vide: cas de la re-installation)
if ($email) {
ecrire_meta('email_webmaster', $email);
}
// Connecter directement celui qui vient de (re)donner son login
// mais sans cookie d'admin ni connexion longue
include_spip('inc/auth');
if (!($auteur = auth_identifier_login($login, $pass)) or !auth_loger($auteur, true)) {
spip_log("login automatique impossible {$auth_spip} {$session}" . count($row));
}
}
// installer les metas
$config = charger_fonction('config', 'inc');
$config();
// activer les plugins
// leur installation ne peut pas se faire sur le meme hit, il faudra donc
// poursuivre au hit suivant
include_spip('inc/plugin');
actualise_plugins_actifs();
include_spip('inc/distant');
redirige_par_entete(parametre_url(self(), 'etape', '4', '&'));
}
示例9: csv2auteurs_exportation
function csv2auteurs_exportation()
{
//récupération des noms des champs
$nom_champs = array();
$champ_supprimer = array(0, 8, 15, 16, 17, 18, 19);
$desc = sql_showtable('spip_auteurs', true);
foreach ($desc[field] as $cle => $valeur) {
$nom_champs[$cle] = "-> {$cle}";
}
foreach ($champ_supprimer as $cle) {
unset($nom_champs[$cle]);
}
return $nom_champs;
}
示例10: spiplistes_base_creer
/**
* @return string
*/
function spiplistes_base_creer () {
//spiplistes_debug_log("spiplistes_base_creer()");
global $tables_principales;
// demande a SPIP de creer les tables (base/create.php)
include_spip('base/create');
include_spip('base/abstract_sql');
include_spip('base/db_mysql');
include_spip('base/spiplistes_tables');
creer_base();
$descauteurs = sql_showtable('spip_auteurs_elargis',true);
if(!isset($descauteurs['field']['spip_listes_format'])){
// si la table spip_auteurs_elargis existe déjà
sql_alter("TABLE spip_auteurs_elargis ADD `spip_listes_format` VARCHAR(8) DEFAULT 'non' NOT NULL");
}
spiplistes_log("INSTALL: database creation");
$spiplistes_base_version = spiplistes_real_version_base_get(_SPIPLISTES_PREFIX);
ecrire_meta('spiplistes_base_version', $spiplistes_base_version);
spiplistes_ecrire_metas();
$spiplistes_base_version = $GLOBALS['meta']['spiplistes_base_version'];
return($spiplistes_base_version);
}
示例11: base_trouver_table_dist
//.........这里部分代码省略.........
* - id_table : nom SPIP de la table (type de boucle)
* le compilateur produit FROM $r['table'] AS $r['id_table']
* - Toutes les autres informations des objets éditoriaux si la table est l'un d'eux.
*
*
**/
function base_trouver_table_dist($nom, $serveur = '', $table_spip = true)
{
static $nom_cache_desc_sql = array();
if (!spip_connect($serveur) or !preg_match('/^[a-zA-Z0-9._-]*/', $nom)) {
return null;
}
$connexion =& $GLOBALS['connexions'][$serveur ? strtolower($serveur) : 0];
$objets_sql = lister_tables_objets_sql("::md5");
// le nom du cache depend du serveur mais aussi du nom de la db et du prefixe
// ce qui permet une auto invalidation en cas de modif manuelle du fichier
// de connexion, et tout risque d'ambiguite
if (!isset($nom_cache_desc_sql[$serveur][$objets_sql])) {
$nom_cache_desc_sql[$serveur][$objets_sql] = _DIR_CACHE . 'sql_desc_' . ($serveur ? "{$serveur}_" : "") . substr(md5($connexion['db'] . ":" . $connexion['prefixe'] . ":{$objets_sql}"), 0, 8) . '.txt';
// nouveau nom de cache = nouvelle version en memoire
unset($connexion['tables']);
}
// un appel avec $nom vide est une demande explicite de vidange du cache des descriptions
if (!$nom) {
spip_unlink($nom_cache_desc_sql[$serveur][$objets_sql]);
$connexion['tables'] = array();
return null;
}
$nom_sql = $nom;
if (preg_match('/\\.(.*)$/', $nom, $s)) {
$nom_sql = $s[1];
} else {
$nom_sql = $nom;
}
$fdesc = $desc = '';
$connexion =& $GLOBALS['connexions'][$serveur ? $serveur : 0];
// base sous SPIP: gerer les abreviations explicites des noms de table
if ($connexion['spip_connect_version']) {
if ($table_spip and isset($GLOBALS['table_des_tables'][$nom])) {
$nom = $GLOBALS['table_des_tables'][$nom];
$nom_sql = 'spip_' . $nom;
}
}
// si c'est la premiere table qu'on cherche
// et si on est pas explicitement en recalcul
// on essaye de recharger le cache des decriptions de ce serveur
// dans le fichier cache
if (!isset($connexion['tables'][$nom_sql]) and defined('_VAR_MODE') and _VAR_MODE !== 'recalcul' and (!isset($connexion['tables']) or !$connexion['tables'])) {
if (lire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], $desc_cache) and $desc_cache = unserialize($desc_cache)) {
$connexion['tables'] = $desc_cache;
}
}
if ($table_spip and !isset($connexion['tables'][$nom_sql])) {
if (isset($GLOBALS['tables_principales'][$nom_sql])) {
$fdesc = $GLOBALS['tables_principales'][$nom_sql];
} elseif ($nom_sql == $nom and isset($GLOBALS['tables_principales']['spip_' . $nom])) {
$nom_sql = 'spip_' . $nom;
$fdesc =& $GLOBALS['tables_principales'][$nom_sql];
} elseif (isset($GLOBALS['tables_auxiliaires'][$n = $nom]) or isset($GLOBALS['tables_auxiliaires'][$n = 'spip_' . $nom])) {
$nom_sql = $n;
$fdesc =& $GLOBALS['tables_auxiliaires'][$n];
}
# table locale a cote de SPIP, comme non SPIP:
}
if (!isset($connexion['tables'][$nom_sql])) {
// La *vraie* base a la priorite
$desc = sql_showtable($nom_sql, $table_spip, $serveur);
if (!$desc or !$desc['field']) {
if (!$fdesc) {
spip_log("trouver_table: table inconnue '{$serveur}' '{$nom}'", _LOG_INFO_IMPORTANTE);
return null;
}
// on ne sait pas lire la structure de la table :
// on retombe sur la description donnee dans les fichiers spip
$desc = $fdesc;
$desc['exist'] = false;
} else {
$desc['exist'] = true;
}
$desc['table'] = $desc['table_sql'] = $nom_sql;
$desc['connexion'] = $serveur;
// charger les infos declarees pour cette table
// en lui passant les infos connues
// $desc est prioritaire pour la description de la table
$desc = array_merge(lister_tables_objets_sql($nom_sql, $desc), $desc);
// si tables_objets_sql est bien fini d'init, on peut cacher
$connexion['tables'][$nom_sql] = $desc;
$res =& $connexion['tables'][$nom_sql];
// une nouvelle table a ete decrite
// mettons donc a jour le cache des descriptions de ce serveur
if (is_writeable(_DIR_CACHE)) {
ecrire_fichier($nom_cache_desc_sql[$serveur][$objets_sql], serialize($connexion['tables']), true);
}
} else {
$res =& $connexion['tables'][$nom_sql];
}
// toujours retourner $nom dans id_table
$res['id_table'] = $nom;
return $res;
}
示例12: spip_pg_create_view
function spip_pg_create_view($nom, $query_select, $serveur='',$requeter=true) {
if (!$query_select) return false;
// vue deja presente
if (sql_showtable($nom, false, $serveur)) {
if ($requeter) spip_log("Echec creation d'une vue sql ($nom) car celle-ci existe deja (serveur:$serveur)");
return false;
}
$query = "CREATE VIEW $nom AS ". $query_select;
return spip_pg_query($query, $serveur, $requeter);
}
示例13: spiplistes_upgrade_base
/**
* Mise à jour de la base de données (tables SPIP-Listes uniquement)
*
* @return string
*/
function spiplistes_upgrade_base (
$spiplistes_name
, $spiplistes_current_version
, $spiplistes_current_version_base
, $spiplistes_real_version_base
) {
//spiplistes_debug_log("spiplistes_upgrade_base(),);
if($spiplistes_current_version_base && ($spiplistes_current_version_base >= $spiplistes_real_version_base)) {
// La base est a jour
return($spiplistes_current_version_base);
}
// faire la mise a jour
spiplistes_debug_log("UPGRADING DATABASE $spiplistes_name $spiplistes_current_version_base TO $spiplistes_real_version_base");
// 'version_base' n'apparait que dans SPIP-Listes 1.98001
// Cherche sur $spiplistes_version pour les versions precedentes
//install
$version_base = 1.91; // ou inferieur ?
if (
(!$spiplistes_current_version)
|| ($spiplistes_current_version < 1.98001)
) {
// si etait deja installe mais dans une vieille version, on reprend a zero
include_spip('base/abstract_sql');
$desc = sql_showtable("spip_listes",true);
if (!isset($desc['field']['id_liste']))
$current_version = 0.0;
if(
sql_getfetsel("*", 'spip_articles'
, "statut=".sql_quote('liste')." OR statut=".sql_quote('inact')." OR statut=".sql_quote('poublist'))
) {
$current_version=0.0;
}
if ($current_version==0.0){
// Verifie que les tables spip_listes existent, sinon les creer
//spiplistes_debug_log("UPGRADE: current_version: $current_version");
include_spip('base/create');
include_spip('base/abstract_sql');
//Migrer des listes anciennes // a deplacer dans une en fonction
$resultat_aff = sql_select("*", 'spip_articles'
, "statut=".sql_quote('liste')." OR statut=".sql_quote('inact')." OR statut=".sql_quote('poublist'));
if(@sql_count($resultat_aff) > 0) {
echo _T('spiplistes:mettre_a_jour');
while ($row = sql_fetch($resultat_aff)) {
$id_article=$row['id_article'];
$titre_liste=corriger_caracteres($row['titre']);
$texte_liste = corriger_caracteres($row['texte']);
$date_liste = $row['date'];
$langue=$row["lang"];
$statut = $row['statut'];
$extra=unserialize($row['extra']);
$patron_liste=$extra["squelette"];
$periode_liste=$extra["periode"];
$maj_liste=$extra["majnouv"];
$email_envoi=$extra["email_envoi"];
$message_auto=$extra["auto"];
$options="<p>".$titre_liste."<br/>";
echo $options."</p>";
// ajout du pied de page
include_spip('public/assembler');
$contexte_pied = array('lang'=>$langue);
$pied = recuperer_fond('modeles/piedmail', $contexte_pied);
$id_liste = sql_insertq(
"spip_listes"
, array(
'titre' => $titre_liste
, 'texte' => $texte_liste
, 'statut' => $statut
, 'date' => $date_liste
, 'lang' => $langue
, 'pied_page' => $pied
)
);
if($message_auto=="oui")
sql_update(
'spip_listes'
, array(
'patron' => sql_quote($patron_liste)
, 'periode' => sql_quote($periode_liste)
, 'maj' => "FROM_UNIXTIME(".sql_quote($maj_liste).")"
, 'email_envoi' => sql_quote($email_envoi)
, 'message_auto' => sql_quote($message_auto)
)
, "id_liste=".sql_quote($id_liste)
);
//.........这里部分代码省略.........
示例14: base_preparer_table_dest
/**
* Preparer la table dans la base de destination :
* la droper si elle existe (sauf si auteurs ou meta sur le serveur principal)
* la creer si necessaire, ou ajouter simplement les champs manquants
*
* @param string $table
* @param array $desc
* @param string $serveur_dest
* @param bool $init
* @return array
*/
function base_preparer_table_dest($table, $desc, $serveur_dest, $init = false)
{
$upgrade = false;
// si la table existe et qu'on est a l'init, la dropper
if ($desc_dest = sql_showtable($table, true, $serveur_dest) and $init) {
if ($serveur_dest == '' and in_array($table, array('spip_meta', 'spip_auteurs'))) {
// ne pas dropper auteurs et meta sur le serveur principal
// faire un simple upgrade a la place
// pour ajouter les champs manquants
$upgrade = true;
// coherence avec le drop sur les autres tables
base_vider_tables_destination_copie(array($table), array(), $serveur_dest);
if ($table == 'spip_meta') {
// virer les version base qui vont venir avec l'import
sql_delete($table, "nom like '%_base_version'", $serveur_dest);
// hum casse la base si pas version_installee a l'import ...
sql_delete($table, "nom='version_installee'", $serveur_dest);
}
} else {
sql_drop_table($table, '', $serveur_dest);
spip_log("drop table '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE);
}
$desc_dest = false;
}
// si la table n'existe pas dans la destination, la creer a l'identique !
if (!$desc_dest) {
spip_log("creation '{$table}' sur serveur '{$serveur_dest}'", 'dump.' . _LOG_INFO_IMPORTANTE);
include_spip('base/create');
creer_ou_upgrader_table($table, $desc, 'auto', $upgrade, $serveur_dest);
$desc_dest = sql_showtable($table, true, $serveur_dest);
}
if (!$desc_dest) {
spip_log("Erreur creation '{$table}' sur serveur '{$serveur_dest}'" . var_export($desc, 1), 'dump.' . _LOG_ERREUR);
}
return $desc_dest;
}
示例15: _sqlite_modifier_table
/**
* Gestion des requêtes ALTER non reconnues de SQLite
*
* Requêtes non reconnues :
*
* ALTER TABLE table DROP column
* ALTER TABLE table CHANGE [COLUMN] columnA columnB definition
* ALTER TABLE table MODIFY column definition
* ALTER TABLE table ADD|DROP PRIMARY KEY
*
* `MODIFY` est transformé en `CHANGE columnA columnA` par spip_sqlite_alter()
*
* 1) Créer une table B avec le nouveau format souhaité
* 2) Copier la table d'origine A vers B
* 3) Supprimer la table A
* 4) Renommer la table B en A
* 5) Remettre les index (qui sont supprimés avec la table A)
*
* @param string|array $table
* - string : Nom de la table table,
* - array : couple (nom de la table => nom futur)
* @param string|array $colonne
* - string : nom de la colonne,
* - array : couple (nom de la colonne => nom futur)
* @param array $opt
* options comme les tables SPIP, qui sera mergé à la table créee :
* `array('field'=>array('nom'=>'syntaxe', ...), 'key'=>array('KEY nom'=>'colonne', ...))`
* @param string $serveur
* Nom de la connexion SQL en cours
* @return bool
* true si OK, false sinon.
*/
function _sqlite_modifier_table($table, $colonne, $opt = array(), $serveur = '')
{
if (is_array($table)) {
reset($table);
list($table_origine, $table_destination) = each($table);
} else {
$table_origine = $table_destination = $table;
}
// ne prend actuellement qu'un changement
// mais pourra etre adapte pour changer plus qu'une colonne a la fois
if (is_array($colonne)) {
reset($colonne);
list($colonne_origine, $colonne_destination) = each($colonne);
} else {
$colonne_origine = $colonne_destination = $colonne;
}
if (!isset($opt['field'])) {
$opt['field'] = array();
}
if (!isset($opt['key'])) {
$opt['key'] = array();
}
// si les noms de tables sont differents, pas besoin de table temporaire
// on prendra directement le nom de la future table
$meme_table = $table_origine == $table_destination;
$def_origine = sql_showtable($table_origine, false, $serveur);
if (!$def_origine or !isset($def_origine['field'])) {
spip_log("Alter table impossible sur {$table_origine} : table non trouvee", 'sqlite' . _LOG_ERREUR);
return false;
}
$table_tmp = $table_origine . '_tmp';
// 1) creer une table temporaire avec les modifications
// - DROP : suppression de la colonne
// - CHANGE : modification de la colonne
// (foreach pour conserver l'ordre des champs)
// field
$fields = array();
// pour le INSERT INTO plus loin
// stocker la correspondance nouvelles->anciennes colonnes
$fields_correspondances = array();
foreach ($def_origine['field'] as $c => $d) {
if ($colonne_origine && $c == $colonne_origine) {
// si pas DROP
if ($colonne_destination) {
$fields[$colonne_destination] = $opt['field'][$colonne_destination];
$fields_correspondances[$colonne_destination] = $c;
}
} else {
$fields[$c] = $d;
$fields_correspondances[$c] = $c;
}
}
// cas de ADD sqlite2 (ajout du champ en fin de table):
if (!$colonne_origine && $colonne_destination) {
$fields[$colonne_destination] = $opt['field'][$colonne_destination];
}
// key...
$keys = array();
foreach ($def_origine['key'] as $c => $d) {
$c = str_replace($colonne_origine, $colonne_destination, $c);
$d = str_replace($colonne_origine, $colonne_destination, $d);
// seulement si on ne supprime pas la colonne !
if ($d) {
$keys[$c] = $d;
}
}
// autres keys, on merge
$keys = array_merge($keys, $opt['key']);
//.........这里部分代码省略.........