/
outils.gtw
85 lines (59 loc) · 3.21 KB
/
outils.gtw
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
~~LANG:EN@enman:components/database/tools~~
===== Manipuler les schémas =====
La classe @@C@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 @@C@jDbtable@@ et @@C@jDbColumn@@.
Vous pouvez récupérer un objet @@C@jDbSchema@@ en appelant la méthode
@@M@schema()@@ d'un objet @@C@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
@@M@execSQLScript()@@ d'un objet @@C@jDbTools@@, objet que l'on récupère via la
méthode @@M@tools()@@ d'un objet de connection.
<code php>
$conn = jDb::getConnection();
$conn->tools()->execSQLScript('/chemin/vers/un/script.sql');
</code>
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.
<code sql>
UPDATE %%PREFIX%%product.....;
INSERT .....;
</code>
===== 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.
<code>
// 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"}'
</code>
Il faut indiquer le type des valeurs du tableau à @@encodeArrayValue@@, à l'aide
de constantes :
* @@jDbPgsqlTools::ARRAY_VALUE_TYPE_TEXT@@ si le tableau contient des chaines
* @@jDbPgsqlTools::ARRAY_VALUE_TYPE_INT@@ si le tableau contient des nombres entiers
* @@jDbPgsqlTools::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.
<code php>
$dbw = jDb::getDbWidget(); // au lieu de getConnection()
$record = $dbw->fetchFirst("SELECT nom, prenom FROM user");
$liste = $dbw->fetchAll("SELECT nom, prenom FROM user");
</code>
Pour le reste des méthodes, voyez [[refapi:jDbWidget|la documentation de référence]].