Utiliser PHP et PDO avec SQL Server

Noter ce cours :

Liens sponsorisés :

Pour faire fonctionner Microsoft SQL Server et PHP PDO, cela n'est pas forcément aussi simple qu'il n'y paraît. Les messages les plus fréquents que vous pouvez rencontrer sont les suivants : Échec de l'ouverture de session de l'utilisateur ou encore could not find driver.

Installation du driver PDO SQL Server

Pour Windows

Depuis PHP 5.3, l'extension php_pdo_mssql n'existe plus et vous devez passer par les librairies fournies par Microsoft. Cliquez ici pour les télécharger. Cliquez sur Download, décompressez le fichier et copiez les librairies (fichiers dont l'extension est .dll) dans le répertoire bin/ext de PHP.

Si vous utilisez Wamp, le répertoire est de cette forme : C:\Program Files\wamp\bin\php\php5.X.X\ext, avec X correspondant à la version de PHP que vous utilisez.

Les systèmes d'exploitation (OS) supportés par la version 3.0 du driver sont les suivantes :

Les systèmes d'exploitation (OS) supportés par la version 2.0 du driver sont les suivantes :

Lorsque vous aurez copié ces DLL, ouvrez les deux fichiers php.ini (ils ne sont pas situés aux mêmes endroits : l'un se trouve dans C:\Program Files\wamp\bin\apache\Apache2.4.4\bin et correspond à votre fichier ini si vous utilisez PHP en ligne de commandes, on appelle cela le mode CGI, l'autre fichier php.ini se trouve dans le répertoire C:\Program Files\wamp\bin\php\php5.4.16).

Repérez les lignes qui commencent par extension= et rajoutez après toutes les extensions la ligne suivante :

extension=php_pdo_sqlsrv_54_ts.dll

Attention ! si vous utilisez PHP 5.3, remplacez le 54 par 53, ce qui pourra donner :

extension=php_pdo_sqlsrv_53_ts.dll

la mention ts signifie thread safe. En fonction de votre version d'Apache, vous aurez peut-être besoin d'utiliser la version non thread safe de la librairie sql server, dans ce cas, la chaîne à utiliser est la suivante :

extension=php_pdo_sqlsrv_54.dll

... et avec PHP 5.3 :

extension=php_pdo_sqlsrv_53.dll

Relancez Apache. Avec WAMP, cliquez sur l'icône W située à gauche de l'heure système (dans la zone appelée Systray) puis cliquez sur Redémarrer les services. Normalement, le W doit redevenir vert.

Pour Linux

Pour se connecter à Microsoft SQL Server sous Linux en PHP avec PDO, utilisez le paquet PDO_DBLIB.

Vérifications

Créez une page test.php située à la racine de votre serveur web, et placez-y le code suivant :

<?php
    print_r(PDO::getAvailableDrivers());
?>

Si l'extension PDO mssql s'est bien installée, vous devriez retrouver dans la liste des drivers disponibles un driver nommé sqlsrv. Ce sera notre driver à utiliser pour toute tentative de connexion avec PDO et SQL Server.

Installation de SQL Server

Pour ce tutoriel, nous utiliserons la version SQL Server 2012 Express, disponible gratuitement en téléchargement sur le site de Microsoft. Installez SQL Server puis lancez-le en tapant dans Windows 8 Sql Server puis en cliquant sur Gestionnaire de configuration SQL Server :

Windows 8 - lancement de SQL Server

L'interface (plutôt rudimentaire) se lance. Déroulez Configuration du réseau SQL Server puis cliquez sur Protocoles pour SQLEXPRESS (le mot SQLEXPRESS peut varier, il correspond au nom de l'instance que vous avez choisie lors de l'installation de SQL Server).

Vous devez maintenant activer le protocole TCP-IP, les canaux nommés et la mémoire partagée. Pour ce faire, double-cliquez sur chacun des trois protocoles, puis, dans la zone Général, mettez Oui concernant l'activation.

Activation du protocole TCP-IP
Activation du protocole TCP-IP

Cliquez sur Ok à chaque fois pour valider. Lorsque vous aurez tout activé, cliquez sur Services SQL Server, puis sélectionnez SQL Server (SQLEXPRESS). Cliquez avec le bouton droit de la souris dessus, puis sélectionnez Redémarrer.

Redémarrer SQL Server
Redémarrer SQL Server

A ce stade, il ne nous reste plus qu'à ajouter les différents utilisateurs qui auront le droit de se connecter via PHP.

SQL Server Management studio

Pour administrer SQL Server, nous utiliserons un outil fourni gratuitement par Microsoft : Microsoft SQL Server Management Studio. Vous pouvez le télécharger ici en version 64 bits ou alors ici en version 32 bits. Installez-le ensuite dans le répertoire de votre choix puis lancez-le en tapant dans l'interface Metro SQL Server management studio puis en cliquant dessus :

SQL Server Management Studio
SQL Server Management studio

Vous pouvez aussi sur d'autres versions de Windows lancer l'outil via le menu démarrer, ou en cliquant sur les touches + R puis en tapant Ssms.exe.

Au lancement de SMSS, vous arrivez directement sur une fenêtre de connexion. Cliquez sur la petite flèche située dans la zone Server Name puis cliquez sur Browse for more pour parcourir la liste des serveurs disponibles. Si votre serveur est déjà renseigné, sautez cette étape.

Connexion à un serveur
Connexion à un serveur

Cliquez sur le petit + situé sur la ligne Database Engine puis sélectionnez votre instance locale. Validez en cliquant sur Ok.

Choix de l'instance
Choix de l'instance

Cliquez ensuite sur le bouton Connect. Si tout s'est bien passé, aucune erreur ne s'affiche et votre instance se trouve à gauche dans la section Object Explorer de SQL Server Management Studio :

Exploration des objets
SQL Server Management studio - vue des objets disponibles

Autoriser l'authentification Windows et SQL Server

Par défaut, SQL Server ne permet pas de s'authentifier autrement que par un compte Windows. Pour pouvoir utiliser PDO avec PHP et un système de login/mot de passe classique, nous devons autoriser l'authentification de type SQL Server.

Pour ce faire, effectuez un clic avec le bouton droit sur l'instance de base de données puis cliquez sur Properties :

Autorisations d'authentification
Autorisations d'authentification

Cliquez à gauche sur la section Security puis, dans la zone intitulée Server authentification, choisissez l'option SQL Server and Windows authentification mode. Validez en cliquant sur Ok.

Modes d'authentification autorisés
Modes d'authentification autorisés

Maintenant que tous nos types d'utilisateurs peuvent se connecter, nous allons créer un utilisateur !

Créer un utilisateur PDO pour MS SQL

Vous devez vous trouver dans SQL Server Management Studio.

Dans votre instance (la mienne étant nommée SQLEXPRESS et située sur ANTHONY-PC, déroulez les dossiers Security => Logins. Faites un clic droit sur Logins puis cliquez sur New login.

Création d'un nouveau login
Création d'un nouvel utilisateur

Remplissez ensuite les cases suivantes :

Paramètres de l'utilisateur
Paramètres de connexion de l'utilisateur

Notre utilisateur est presque créé. A ce stade, il ne peut encore se connecter à aucune base de données. Il va falloir effectuer un mapping permettant de lui autoriser l'accès à toutes ou certaines bases spécifiées.

Cliquez ensuite en haut à gauche sur User Mapping.

Cochez ensuite la ou les bases de données que l'utilisateur pourra voir ou contrôler :

Droits de l'utilisateur
Droits de l'utilisateur

Pour chacune des bases de données que vous cocherez dans la case Users mapped to this login, vous pourrez définir des droits dans la case Database role membership for : [NOM DE LA BASE COCHÉE). Ces permissions sont les suivantes :

Cochez les cases correspondant aux permissions choisies, puis cliquez sur Ok. L'utilisateur a été créé. Vous pouvez le voir dans la section générale Security => Logins ainsi que dans Databases et pour chacune des bases de données, dans la section Security => Users.

Vous pouvez maintenant vous connecter en PHP avec PDO à votre base de données SQL Server.

Connexion avec PDO

Nous utiliserons un code très simple qui utilise la classe de base PDO, fournie avec PHP.


<?php
    class sql
    {
        private $connexion_sql;
        
        function __construct()
        {
            $this->connexion_bdd = new PDO('sqlsrv:Server=ANTHONY-PC\SQLEXPRESS;Database=econtrol''anthony''anthony');

            // Fixe les options d'erreur (ici nous utiliserons les exceptions)
            $this->connexion_bdd->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        }
        
        public function requete($requete)
        {
            $prepare $this->connexion_bdd->prepare($requete);
            $prepare->execute();
            
            return $prepare;
        }
    }

    $sql = new sql();
?>

Remplacez les valeurs que vous pouvez trouver dans ce code par vos valeurs, et exécutez le code PHP dans votre navigateur Web. Aucune erreur ne devrait apparaître.

Ajoutez maintenant la logique suivante, en remplaçant le nom de ma table applications par une table qui existe dans votre base de données :


<?php
    class sql
    {
        private $connexion_sql;
        
        function __construct()
        {
            $this->connexion_bdd = new PDO('sqlsrv:Server=ANTHONY-PC\SQLEXPRESS;Database=econtrol''anthony''anthony');

            // Fixe les options d'erreur (ici nous utiliserons les exceptions)
            $this->connexion_bdd->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
        }
        
        public function requete($requete)
        {
            $prepare $this->connexion_bdd->prepare($requete);
            $prepare->execute();
            
            return $prepare;
        }
    }

    $sql = new sql();
    
    $req $sql->requete('SELECT * FROM applications');
    while ($r $req->fetch())
    {
        print_r($r);
    }
?>

Vous avez aimé cet article intitulé Utiliser PHP et PDO avec SQL Server ? Partagez-le !
Vulgarisation-informatique.com
Cours en informatique & tutoriels