Bonjour,
MySQL permet de faire des insertion avec la syntaxe de l'update, c'est à dire en utilisant le mot clef "SET" :
Et malheureusement Postgres ne le permet pas, il utilise le mot clef "VALUES" obligatoirement (à ma connaissance tout du moins ) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO toto SET oeil_gauche=0, oeil_droit=0, nez="+", bouche="=";
J'essai de construire deux classes d'accès à une base de données, une pour MySQL et l'autre pour Postgres, toutes deux dérivées d'une classe contenant les informations de connexion à la base, ce qui permet de ne changer que l'appel du constructeur de l'objet relatif à la DB pour changer de SGBD.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 INSERT INTO toto (oeil_gauche, oeil_droit, nez, bouche) VALUES (0, 0, "+", "=");
Ceci marche très très bien, mais je voudrais pouvoir utiliser la syntaxe MySQL, c'est à dire celle utilisant le mot clef "SET", pour les insertions, car avoir dans le code le nom du champ et sa valeur l'un à coté de l'autre simplifie la maintenance à mon goût (avec la syntaxe Postgres j'oublie une fois sur d'enlever ou rajouter soit le champ soit la valeur dans leurs parenthèses respectives).
Ma question est donc simple (après ce long préambule ) : existe-t-il une fonction toute faite pour changer la syntaxe des requêtes d'insertion contenant le mot clef "SET" pour les rendre compatibles avec Postgres ?
J'ai essayé d'en faire une, dans laquelle j'utilise la fonction split() pour découper la requête en vue de la reformer pour PG, mais je me heurte à un problème :
comme je découpe la requête en me basant sur les virgules, si une donnée à insérer contient une virgule, le découpage n'est plus bon...
Voici la fonction en question :
Si quelqu'un connait une fonction toute faite, ou alors une technique de sioux pour ne pas tenir compte de la virgule si elle est contenue entre des guillemets, ce serait merveilleux
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 function makeInsertQuery($query) { // $split[0] = 'INSERT INTO table_name' // $split[1] = 'column=value, column=value...' if(preg_match('(SET)', $query)) $split = split('SET', $query); else $split = split('set', $query); // $equalities[0] = column=value // $equalities[1] = column=value ... $equalities = split(',', $split[1]); // c'est ce split qui pose problème foreach($equalities as $value) { // $peers[0] = column // column[1] = value $peers = split('=', $value); if(!$columns) $columns = $peers[0]; else $columns .= ', '.$peers[0]; if(!$values) $values = $peers[1]; else $values .= ', '.$peers[1]; } $query = $split[0].' ('.$columns.') VALUES ('.$values.')'; return $query; }
Cordialement,
mathias
Partager