Section: Schémas et autres outils
« Exécuter des requêtes | ^ jDb : accéder à une base de données SQL |
− Table des matières
Manipuler les schémas ¶
La classe jDbSchema
permet de manipuler la structure d'une base de donnée.
Elle possède ainsi des méthodes pour créer une table, récupérer la structure
d'une table, ajouter/modifier/supprimer des colonnes etc. Elle s'accompagne des
classes jDbtable
et jDbColumn
.
Vous pouvez récupérer un objet jDbSchema
en appelant la méthode
schema()
d'un objet jDbConnection
.
Voir la documentation de référence.
Exécuter un script SQL ¶
Il est possible d'exécuter un script SQL contenant plusieurs requêtes SQL. Il
suffit de passer le chemin du fichier du script à la méthode
execSQLScript()
d'un objet jDbTools
, objet que l'on récupère via la
méthode tools()
d'un objet de connection.
$conn = jDb::getConnection();
$conn->tools()->execSQLScript('/chemin/vers/un/script.sql');
Pour tenir compte de la possibilité de préfixer les tables via la configuration
d'un profil, il est fortement recommander de précéder tout les noms de tables
par %%PREFIX%%
, cela sera remplacé par le préfixe de table (si il y en a
un), avant l'exécution du script.
UPDATE %%PREFIX%%product.....;
INSERT .....;
Méthodes pour Postgresql ¶
La classe outils pour Postgresql contient des méthodes additionnels pour manipuler les champs
de type tableau : decodeArrayValue()
et encodeArrayValue()
. Ils permettent de transformer
les valeurs Postgresql de type tableau en tableau PHP et vice-versa.
// On devrait avoir ici une connexion sur une base Postgresql
$conn = jDb::getConnection();
$pgTools = $conn->tools();
// exemple de décodage
$record = $conn->query('SELECT myarrayfield FROM mytable')->fetch();
// Si la valeur de myarrayfield est '{{"meeting", "lunch"}, {"training", "presentation"}}'
// phpValue aura comme valeur 'array(array("meeting", "lunch"), array("training", "presentation"))'
$phpValue = $pgTools->decodeArrayValue($record->myarrayfield);
// exemple d'encodage
$phpValue = array("lunch", "presentation");
$stmt = $conn->prepare("INSERT INTO mytable (myarrayfield) VALUES(:arr)");
$stmt->execute(array( 'arr' => $pgTools->encodeArrayValue($phpValue, jDbPgsqlTools::ARRAY_VALUE_TYPE_TEXT)));
// la valeur dans myarrayfield sera '{"lunch","presentation"}'
Il faut indiquer le type des valeurs du tableau à encodeArrayValue
, à l'aide
de constantes :
jDbPgsqlTools::ARRAY_VALUE_TYPE_TEXT
si le tableau contient des chainesjDbPgsqlTools::ARRAY_VALUE_TYPE_INT
si le tableau contient des nombres entiersjDbPgsqlTools::ARRAY_VALUE_TYPE_FLOAT
si le tableau contient des nombres flottants
Si les valeurs PHP ne sont pas du type indiqué, il y aura une conversion de type de la valeur.
jDbWidget ¶
jDbWidget est une classe fournissant des méthodes utiles.
$dbw = jDb::getDbWidget(); // au lieu de getConnection()
$record = $dbw->fetchFirst("SELECT nom, prenom FROM user");
$liste = $dbw->fetchAll("SELECT nom, prenom FROM user");
Pour le reste des méthodes, voyez la documentation de référence.