IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

PHP, MsSql et Common Table Expressions


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut PHP, MsSql et Common Table Expressions
    Bonjour,

    J'ai développé, pour ma société, des outils intranet parallèles à notre ERP.
    Les applications développées par mes soins ne stockent quasiment rien et le peu qu'elles doivent stocker, elles le font dans une DB Mysql.
    Par contre, la majorité des données proviennent de la DB de l'ERP en MsSql à laquelle j'ai accès en lecture seule.
    Je n'ai donc pas la possibilité de créer des vues. (d’où le recours aux CTE)
    Dans un premier temps, j'ai fait cela avec xampp et maintenant, pour une question de stabilité du système, je souhaite migrer vers une solution Lamp (Ubuntu Server)...

    J'ai donc développé sous windows en installant un driver spécifique pour PDO.
    Et maintenant que je veux migrer sous linux, la connexion utilise PDO_DBLIB et Freetds.
    La connexion est établie et fonctionnelle.

    Par contre, là ou je bloque, c'est que toutes les requêtes MsSql contenant des CTE ne passent pas alors qu'elles passaient bien avec xampp.
    Je n'ai pas de soucis avec les autres requêtes...
    Existe-t-il une syntaxe particulière?
    Dois-je oublier les CTE sous linux? (ce qui m'embêterai très fort...)
    Existe-t-il un module supplémentaire à installer pour PDO_DBLIB qui permettrai la prise en charge des CTE?

    Merci de votre aide

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    je suis tombé sur une discussion indiquant que "sqlsrv_has_rows" retourne FALSE avec une CTE même s'il y a des résultats. et la solution serait de d'abord lire une ligne du résultat et à partir de là, la fonction "sqlsrv_has_rows" retourne le bon nombre.
    est ce que cela peut vous aider où le problème est autre part ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    je ne sais pas...
    je vais creuser la piste...
    Merci en tous cas...

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Après avoir creusé la question,
    Il semblerait que :
    • PDO (linux) ne gèrerait pas par défaut les requêtes multiple.
    • La clause WITH serait interprétée dans PDO (linux) comme étant une première requête qui forcément ne renvoie pas de résultat et génère une erreur...

    J'ai trouvé des solutions pour des requêtes multiples qui sont alors interprétées les unes à la suite des autres... seulement voilà pour une CTE, la seconde partie à besoin des résultats de la première et ça, je sais pas comment le gérer

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    En reconsidérant le problème depuis le début, je me suis dit que cela ne pouvait pas être du à PDO puisque cela fonctionnait sous windows...
    Alors je me suis dis, pourquoi ce ne serait pas le driver...
    J'ai donc cherché un peu du côté des drivers disponible sous ubuntu et j'ai trouvé le paquet php5-odbc... que j'ai installé...
    puis une petite recherche google pour modisfier ma string de connexion:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->database2 = new PDO("dblib:host=mssql;dbname=$dbname", $dbuser, $dbpassword);
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->database2 = new PDO("odbc:DRIVER=FreeTDS;SERVERNAME=mssql;DATABASE=$dbname", $dbuser, $dbpassword);
    et là, miracle... ça fonctionne parfaitement...

    @mathieu : Merci pour ton aide...

  6. #6
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 234
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 234
    Points : 15 531
    Points
    15 531
    Par défaut
    pas de problème, merci à toi d'avoir expliqué comment régler le problème ça pourra servir à d'autres

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CTE (Common Table Expression) sous MYSQL
    Par patic dans le forum Requêtes
    Réponses: 7
    Dernier message: 04/09/2013, 13h42
  2. Réponses: 1
    Dernier message: 22/01/2009, 16h48
  3. Conversion appli php/MySQL -> php/MsSQL - Prenage de tête
    Par Joelindien dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 02/09/2008, 17h40
  4. Réponses: 4
    Dernier message: 26/06/2008, 12h54
  5. [PHP - MSSQL] Problème d'upload / binaire
    Par noiserie dans le forum MS SQL Server
    Réponses: 12
    Dernier message: 25/07/2005, 18h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo