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, PDO et MSSQL 2008 [SQL-Server]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien informatique multi competences
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Technicien informatique multi competences
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut PHP, PDO et MSSQL 2008
    Bonjour,

    je débute en php.

    J'essaie d'établir une connexion vers une base de données afin de manipuler l'exploitation des données.
    J'utilise la methode PDO qui semble être une méthode courante et recommandée pour me connecter à une base de données SQL Server 2008.
    J'ai donc crée une base nommée BASE_TEST sur mon serveur en local. Un user du nom de php et un schéma du même nom y sont associés.

    J'ai repris le script de php.net pour se connecter à la base de données mais rien n'y fait, je n'obtiens pas de résultat.
    J'ai donc réduit le code au minimum mais rien.

    J'ai activé dans php.ini les lignes suivantes :
    extension=php_mssql.dll
    extension=php_pdo.dll
    extension=php_pdo_mssql.dll

    Voici le code testé :
    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
    <?php
      try {
        $hostname = "127.0.0.1";            //host
        $dbname = "BASE_TEST";            //db name
        $username = "php";            // username like 'sa'
        $pw = "php";                // password for the user
     
        $dbh = new PDO ("mssql:host=$hostname;dbname=$dbname","$username","$pw");
      } catch (PDOException $e) {
        echo "Failed to get DB handle: " . $e->getMessage() . "\n";
        exit;
      }
      $stmt = $dbh->prepare("SELECT * FROM table");
      $stmt->execute();
      while ($row = $stmt->fetch()) {
        print_r($row);
      }
      unset($dbh); unset($stmt);
    ?>
    Le résultat obtenu : Failed to get DB handle: could not find driver

    J'ai testé en minimisant le code à la connexion à la base de données mais rien n'y fait.

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Vérifie dans ton php.ini que l'extension pdo_mssql est bien activée.

    Attention elle n'existe plus en PHP 5.3
    Tu peux utiliser sqlsrv
    http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien informatique multi competences
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Technicien informatique multi competences
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut
    Bonjour et merci pour ta réponse.

    Citation Envoyé par rom1ymca Voir le message

    J'ai activé dans php.ini les lignes suivantes :
    extension=php_mssql.dll
    extension=php_pdo.dll
    extension=php_pdo_mssql.dll
    Je suppose que ça correspond à la 3 ligne activée.
    Je suis en version 5.2.17.

    Je vais essayer la méthode que tu me conseilles, je te tiens au courant.

    Rom1

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je voulais dire phpinfo() et pas php.ini
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Technicien informatique multi competences
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Technicien informatique multi competences
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Je voulais dire phpinfo() et pas php.ini
    Effectivement :
    PDO
    PDO support enabled
    PDO drivers no value

    Il me manque un truc.
    Je cherche d'ou ça vient.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien informatique multi competences
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Technicien informatique multi competences
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut
    J'ai ajouté ca dans php.ini :
    extension=php_pdo_sqlsrv_52_ts_vc6.dll

    rien ne change toujours le même message.

    Une idée ?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Est-ce que tu as controlé que le driver était bien présent dans ton phpinfo() ?
    Est-ce que tu as changé le mode de connexion PDO dans ton code ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien informatique multi competences
    Inscrit en
    Mai 2011
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bahamas

    Informations professionnelles :
    Activité : Technicien informatique multi competences
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2011
    Messages : 5
    Par défaut Ça y est ça marche !
    Ca y est ca fonctionne.

    Petit Récap car je suis tombé sur un paquet de forums où pas mal de monde galère avec tout ça.
    Donc en effet, il vaut mieux éviter pdo_mssql. cf lien suivant :
    http://php.net/manual/fr/ref.pdo-dblib.php

    Préférez la méthode PDO SQLSRV :
    http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx

    Il faut donc installer les librairies qui vont bien : (voir lien ci-dessus) et sélectionner celles qui correspondent à son environnement (pour moi un php.5.2.17 en vc6).

    Dans php.ini, ajouter, dans les extensions, la lignes suivante :
    extension=php_pdo_sqlsrv_52_ts_vc6.dll
    ou celle qui correspond à votre version de php. Normalement c'est pris dynamiquement mais, au pire, un redémarrage d'Apache et hop !

    En lançant phpinfo(), il doit y avoir une section PDO et une section pdo_sqlsrv. Dans PDO, il doit y avoir au moins sqlsrv d'activé. Dans pdo_sqlsrv, on s'en fiche mais la section doit exister.
    On peut aussi utiliser la methode suivante : print_r(PDO::getAvailableDrivers());
    Elle doit retourner : Array ( [0] => sqlsrv )

    Maintenant un code de base qui permet une connexion à la base de données SQLServer et liste une table (pris sur PHP.net et adapté en fonction de mes besoins).

    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
     
    <?php
    try {
        $hostname = "127.0.0.1";            //host
        $dbname = "BASE_TEST";            //db name
        $username = "php";            // username like 'sa'
        $pw = "php";                // password for the user
     
        $dbh = new PDO ("sqlsrv:server=$hostname;database=$dbname","$username","$pw");
     
      } catch (PDOException $e) {
        echo "Failed to get DB handle: " . $e->getMessage() . "\n";
        exit;
      }
      $stmt = $dbh->prepare("SELECT * FROM php.table1");
      $stmt->execute();
      while ($row = $stmt->fetch()) {
        print_r($row);
      }
      unset($dbh); unset($stmt);
    ?>
    Pour rappel de ma config :
    Apache 2.2.18
    PHP 5.2.17
    SQL Server 2008 R1 SP2
    Windows 7 professionnel

    Merci à toi sabotage !!!

    Rom1

  9. #9
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut De mon coté sa bugg toujours
    Bonsoir rom1 & sabotage,

    Moi j'arrive pas de mon coté pourtant j'ai suivi à la lettre ton évolution.
    Enfin peut-être je m'embrouille.
    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
    <?php
     
    	$hostname = "127.0.0.1";            //host
        $dbname = "JEUX";            //db name
        $username = "php";            // username like 'sa'
        $pw = "php";
     
    // Connexion à la base de données
    try
    {
    	$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
    	$dbh = new PDO ("sqlsrv:server=$hostname;database=$dbname","$username","$pw");
    	$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
     
    	echo "<br/> Connexion réussie !! <BR/>";
    }
    catch(Exception $e)
    {
            die('<br/> Erreur : '.$e->getMessage());
    }
     
    ?>
    Je veux juste établir la connexion.

    Ma version de php est la 5.3.0
    heu j'utilise wampServer et j'ai sqlserver 2005.

    J'ai coché le pilote php_pdo_mssql dans php.ini .
    J'ai téléchargé le pilote sqlsvr 20 et installé dans le repertoire de sqlserver dans Mes Documents.

    J'ai rajouté la ligne
    extension=php_pdo_sqlsrv_52_ts_vc6.dll
    Et décoché les lignes:
    extension=php_pdo_mssql.dll
    extension=php_pdo.dll
    extension=php_pdo_mysql.dll
    Et lorsque je redémarre Apache et relance mon script:
    Erreur : could not find driver
    Ha j'oubliais dans phpinfo la section PDO drivers je ne vois que mysql, sqlite qui sont enabled.

    Je comprends pas...

    Merci

  10. #10
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut
    En remarquant que le pilote sqlsrv20 a extrait plusieurs dll je me demandais si c'est parce que je copiais la mauvaise extensions dans php.ini

    Moi j'utilise VISTA 32 bits et ma version de php est la 5.3
    Donc quelle dll utilisée? Et... si c'est pas trop demandé pourquoi?

    Pour note j'ai rajouté toutes les lignes dans php.ini mais toujours rien

  11. #11
    Membre éclairé Avatar de SonnyFab
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    498
    Détails du profil
    Informations personnelles :
    Âge : 35

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 498
    Par défaut Le message d'erreur a changé
    Bonsoir,

    Moi j'utilise SQL Server 2005.

    En mettant toute les dll du pilote sqlsrv20 dans le répertoire php dans wamp.
    Cette extension nécessite le Microsoft SQL Server 2008 Native Client (SP1 ou version ultérieure) ou Microsoft SQL Server 2008 R2 Native Client pilote ODBC pour communiquer avec SQL Server. Aucun de ces pilotes ODBC sont actuellement installés. Accéder à l'URL suivant pour télécharger le Microsoft SQL Server 2008 R2 Native Client pilote ODBC pour x86: http://go.microsoft.com/fwlink/?LinkId=163712
    Je comprends pas pourquoi on me parle de pilote ODBC or qu'ici on utilise le pilote sqlsrv.

    Merci

  12. #12
    Membre extrêmement actif
    Avatar de kdmbella
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2010
    Messages
    799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2010
    Messages : 799
    Par défaut
    salut
    j'ai galéré avant de trouver la solution :
    voici le code à écrire coté php pour se connecté c'est une classe que j'ai concu pour mes besoins perso et la c'est avec une authentification windows :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    class connexion 
    {
        const server = "KDMBELLA\SQLEXPRESS";
        const database = "test";
     
        //utilisation de l'authentification windows
        const user ="";
        const pwd = ""; 
     
        public function __construct()
        {
            //le constructeur est vide
        }
     
        public function connect()
        {
            //cette fonction permet de se connecter à la BD 
            //via PDO en utilisant une authentification windows
            try 
            {
                $conn = new PDO("sqlsrv:server=".self::server.";"."Database=".self::database, $uid, $pwd);
                return $conn;
            }
            catch(Exception $e)
            { 
                die( print_r( $e->getMessage() )); 
                return false;
            }
        }
     
        public function disconnect(PDO $conn)
        {
            //cette méthode permet de se deconnecter de la base de donnée via PDO
            try
            {
                unset($conn);
                return true;
            }
            catch(Exception $e)
            {
                print_r($e->getMessage());
                return false;
            }
        }
     
    }
    pour une authentification par login et mot de passe, il suffit de renseigner
    la valeur du login et du mot de passe plus haut.

    maintenant coté php.ini après avoir télécharger et copier les fichiers du pilote dans le repertoire des extensions de votre installation de php,
    ajouter ces lignes dans votre php.ini dans la zone Dynamic Extensions

    ;;;;;;;extention pour sqlserver;;;;;
    extension= php_sqlsrv_52_ts_vc6.dll
    extension= php_pdo_sqlsrv_52_ts_vc6.dll

    attention les dll à intégrer dépendent de ta distribution de php que vous avez cf. le fichier readme.htm du pilote que vous avez décompressez dans le repertoire des extensions de php

    enfin in faut télécharger la dernière version du sqlserver native client 2008 même si vous avez une version de sql server 2005.

    si vous aver activer cette extension "extension=php_mssql.dll" désactivez la car elle peut crée un conflit

    a mon tour de pauser une question aussi : comment exécuter des procédures stockées sql server 2005 en PHP via PDO : si vous avez des liens ou des docs je suis partant
    "L'humanité se divise en trois catégories : ceux qui ne peuvent pas bouger, ceux qui peuvent bouger, et ceux qui bougent."
    - Benjamin Franklin

    De l'aide en Javascript , consultez la FAQ JS.

    De l'aide sur le FrameWork JS DHTMLX : posez vos questions sur le forum des Bibliothèques & Frameworks JS.

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

Discussions similaires

  1. Joindre base MSSQL 2005 sur MSSQL 2008
    Par x2thez dans le forum Administration
    Réponses: 2
    Dernier message: 17/08/2011, 11h11
  2. [PDO] PHP-PDO-MySQL connection 'persistante' et stored-procedures
    Par chrisrol dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/01/2010, 19h18
  3. [PDO] PHP/PDO ne marche pas en ligne de commande
    Par ofostier dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 03/10/2009, 11h29
  4. connexion string pour MSSQL 2008
    Par x2thez dans le forum Développement
    Réponses: 5
    Dernier message: 03/07/2008, 11h01
  5. [SQL] [php] PDO - fonction BindParam
    Par fadeninev dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/06/2006, 15h36

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