La fonction trouver_table()
(base_trouver_table_dist
) est déclarée dans ecrire/base/trouver_table.php et permet d’obtenir une description d’une table SQL. Elle permet de récupérer la liste des colonnes, des clés, des jointures déclarées, et d’autres informations.
En tant que fonction surchargeable, elle s’utilise avec charger_fonction :
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table($table, $serveur);
Ses paramètres sont :
-
$table
: le nom de la table (’spip_articles’ ou ’articles’) -
$serveur
: optionnel, le nom de la connexion SQL utilisée, qui est par défaut celle de l’installation de SPIP.
Le tableau $desc
retourné est de cette forme :
array(
'field' => array('colonne' => 'description'),
'key' => array(
'PRIMARY KEY' => 'colonne',
'KEY nom' => 'colonne' // ou 'colonne1, colonne2'
),
'join' => array('colonne' => 'colonne'),
'table' => 'spip_tables'
'id_table' => $table,
'connexion' => 'nom_connexion',
'titre' => 'colonne_titre AS titre, colonne_langue AS lang'
);
- La clé
field
est un tableau associatif listant toutes les colonnes de la table et donnant leur description SQL, -
key
est un autre tableau listant les clés primaires et secondaires, -
join
liste les colonnes de jointures possibles, si déclarés dans la description des tables principales ou auxiliaires -
table
est le véritable nom de la table (hors préfixe : si le préfixe des tables est différent de « spip », c’est « spip_tables » qui sera tout de même retourné), -
id_table
est le paramètre$table
donné, -
connexion
est le nom du fichier de connexion, si différent de celui d’installation, -
titre
est une déclaration SQL de SELECT indiquant où est la colonne titre ou où est la colonne langue (sert entre autre pour calculer les URLs) ; exemples : «titre, lang
», «nom AS titre, '' AS lang
»
Cette fonction met en cache le résultat de l’analyse afin d’éviter des accès intempestifs au serveur SQL. Pour forcer un recalcul de ce cache, il faut appeler la fonction avec une chaine vide :
$trouver_table = charger_fonction('trouver_table', 'base');
$desc = $trouver_table('');
Note : Lorsqu’une table est demandée sans préfixe « spip_ », c’est le nom de la table avec le préfixe donné pour le site qui sera retourné (pour peu que la table soit déclarée à SPIP). Demander une table « spip_tables » cherchera l’existence véritable de cette table (le préfixe n’est pas remplacé par celui utilisé pour le site). Dans l’avenir, une option sera probablement ajoutée à la fonction trouver_table()
, comme pour sql_showtable afin de pouvoir modifier automatiquement le préfixe.