Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/11/2010, 20h46   #1
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Par défaut Requête valide pour MySQL & PostgreSQL

Bonjour,

j'aimerais pouvoir réaliser des requêtes qui fonctionne autant pour Postgre que pour MySQL. Du coup j'utilise PDO pour uniformiser tout ça.

Ma DB existante sur MySQL utilise des champs/table avec des majuscules (ex:ID_Maison,..) et du retour de la requête j'en retire un objet pré defini avec des set et get (getID_Maison(),...).

Mais Postgre lui n'aime pas trop les majuscule et si l'on veut faire un
Code :
SELECT * FROM habitation WHERE ID_Maison = $id
il faut mettre le champ ID_Maison entre "" sinon il y a erreur et il ne trouve pas le champ (Postgre transforme tout en minuscule sauf s'il y a des ""). Mais par contre, MySQL lui, n'aime pas trop les guillemets et s'il y en a, il considérera le champ comme une chaine de caractère..

Les solutions proposées :
- mettre des `` à la place des "" mais Postgre ne les acceptes pas.
- renommer les champs,table,.. en minuscule => vu la taille de la DB je n'ose imaginer le bordel..
- mettre des `` et quand on fait appelle à pdo parser la requête et remplacer les `` par des "" si on utilise Postgre...bof bof.

N'y aurait-il pas un réglage/paramètre/astuce rédempteur à ce problème ?

Si vous avez une solution, je suis de toute ouïe. Merci d'avance et bonne soirée/journée.

Antoine.
aDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h08   #2
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Bonjour,

Je ne sais pas à quel niveau tu travailles exactement (niveau du PHP ou niveau du SQL directement). Cependant, en supposant que tu te trouves au niveau PHP, tu pourrais essayer de te passer un paramètre à ton script qui serait justement le guillemet dont tu as besoin/pas besoin dépendant de quel SGBD tu utilises. En supposant que tu utilises le POST, tu pourrais avoir une variable:

Code :
1
2
$_POST['delimiteur'] = "\"" //pour postgre
$_POST['delimiteur'] = "" //pour mysql
et du coup, tu construis ta requête de la façon suivante:

Code :
$sql = "SELECT " . $_POST['delimiteur'] . "CH_test" . $_POST['delimiteur'] . " FROM table test";
Donc, quand tu es sur mysql, le délimiteur est à vide et tu as le champ non entouré et si tu tombes sur postgre le délimiteur sera un guillemet. C'est générique comme idée, mais j'espère que ça va pouvoir t'aider .
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h16   #3
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Bonjour osuwariboy,

effectivement cela ce trouve au niveau PHP.

Ton idée rejoint un peu celle que j'ai citée :
Citation:
- mettre des `` et quand on fait appelle à pdo parser la requête et remplacer les `` par des "" si on utilise Postgre...bof bof.
Merci tout de même de ta solution.
Je pense que j'espère un peu trop une solution miracle..(met tel paramètre à 1 et Postgre tiendra compte des majuscules sans devoir mettre des "",..)
aDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/11/2010, 21h39   #4
Membre actif
 
Tobbi Filteau
Inscription : mai 2010
Messages : 176
Détails du profil
Informations personnelles :
Nom : Tobbi Filteau

Informations forums :
Inscription : mai 2010
Messages : 176
Points : 177
Points : 177
Pas de problème, content de pouvoir être utile .

Je ne sais pas si la fonction PDO::prepare est une fonction assez intelligente pour préparer correctement la requête dépendant du SGBD? Ça vaudrait peut-être le coup d'essayer . Ils en parlent ici:

http://www.php.net/manual/fr/pdo.prepare.php
osuwariboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 09h31   #5
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Votre souci est une mauvaise conception de votre base de données.
Si vous voulez travailler avec deux base de données, vous deviez prendre en compte les spécifications de vos moteurs de base de données.

Soit dit en passant , les standards SQL donne les mots clés en Majuscule (SELECT....FROM....WHERE) et le reste en minuscule.

Maintenant, il est possible de forcer la majuscule dans PostgreSQL, mais cela n'est pas mis par défaut.

Donc si vous voulez proposez votre projet à d'autres, ils seront obligé de prendre la même config que vous....ce qui représente un sérieux freins pour l'acceptation de votre projet.

Il vaut peut-être mieux perdre une journée à re-modéliser votre Db afin de la rentre compatible pour les deux environnent.
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/11/2010, 10h07   #6
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
je d'accord avec MaitrePylos. Maintenant, il semble impossible de tout redéfinir, du moins pour l'instant.

Quand tu dis qu'il est possible de forcer la majuscule, tu parles des "" ou d'un paramètre à changer ?

Pour le prepare de PDO, j'ai essayé, sans succès, merci quand même
aDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 09h55   #7
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
MaitrePylos, saurais-tu répondre à ma question ?

Quand tu dis qu'il est possible de forcer la majuscule, tu parles des "" ou d'un paramètre à changer ?

Merci d'avance.
aDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 10h33   #8
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 167
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 167
Points : 6 451
Points : 6 451
Alors pour PostgreSQL je me suis un peu avancé, pour MySQL il y a moyen de définir la statut .

Maintenant si tu es sur Windows, cela ne devrais pas poser de soucis ?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2010, 17h47   #9
Invité de passage
 
Inscription : novembre 2010
Messages : 5
Détails du profil
Informations forums :
Inscription : novembre 2010
Messages : 5
Points : 0
Points : 0
Malheureusement je n'ai pas de problème de casse sous MySQL mais juste sur Postgres..
aDenis est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h48.


 
 
 
 
Partenaires

Hébergement Web