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_TEXTsi le tableau contient des chainesjDbPgsqlTools::ARRAY_VALUE_TYPE_INTsi le tableau contient des nombres entiersjDbPgsqlTools::ARRAY_VALUE_TYPE_FLOATsi 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.


