SQL Server Driver

De Wiki de Jordan LE NUFF
< Technique‎ | PHP
Révision datée du 3 avril 2020 à 07:20 par Jordan (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche

Présentation

Cette page a pour objet de décrire comment implémenter une connexion PDO depuis PHP Linux vers un serveur SQL Server de chez Microsoft.

Objectif

L'objectif premier est de mettre en oeuvre une connexion PDO depuis PHP 7 Linux vers un serveur SQL Server de version 2005 minimum.

Cela permet ainsi de ne pas traiter des cas de PHP 5 ou de SQL Server antérieurs à 2005, dont la mise en oeuvre est totalement différente.

Mode opératoire

A l'image de l'interface PDO pour MySQL, il existe une interface PDO pour SQL Server. Toutefois, "l'extension PDO_SQLSRV n'est compatible qu'avec PHP sur Windows". Ainsi, pour Linux, il faudra s'appuyer sur l'interface PDO pour ODBC.

Installation des paquets Windows

Ajout du dépôt Microsoft pour CentOS 7 / RHEL 7 :

curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo

Suppression des paquets pouvant être conflictuels :

yum remove unixODBC-utf16 unixODBC-utf16-devel

Installation des pilotes ODBC version 17 pour Microsoft SQL Server sur Linux :

yum install msodbcsql17

Installation du client SQL Server pour Linux :

yum install mssql-tools

Ajout du client dans le PATH (valable à la prochaine connexion) :

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' > /etc/profile.d/mssql.sh

Ajout du client dans le PATH immédiatement :

export PATH="$PATH:/opt/mssql-tools/bin"

Installation des paquets Linux

Installation des bibliothèque ODBC pour Unix :

yum install unixODBC-devel

Compilation des extensions PHP

Pour activer les fonctions pouvant manipuler les données provenant d'un serveur SQL Serveur, il faut installer l'extension sqlsrv.

Pour activer les connecteur PDO pouvant se connecter à un serveur SQL Serveur, il faut installer l'extension pdo_sqlsrv.

Pour ce faire, il faut s'appuyer sur PECL (PHP Extension Community Library), un dépôt d'extensions PHP qui est disponibles via le système de paquet PEAR (PHP Extension and Application Repository). Cela va compiler les extensions dont il est question.

Pour mettre à jour automatiquement le fichier php.ini, passer au préalable la commande suivante :

pecl config-set php_ini /local/php/php7/lib/php.ini

Adapter le chemin en fonction de la configuration.

Installer l'extension sqlsrv :

pecl install sqlsrv

Installer l'extension pdo_sqlsrv :

pecl install pdo_sqlsrv

Pour vérifier la bonne prise en prise en compte :

Putty icon.png Console SSH

Dans le cas d'une installation sur PHP-FPM, relancer le service :

systemctl restart php7-fpm.service

Test des extensions

Voici un fichier pour pouvoir tester la connexion à un serveur SQL Server :

<?php
$serverName = "myserver\myinstance, port";
$connectionOptions = array(
    "database" => "mydatabase",
    "uid" => "myuser",
    "pwd" => "mypassword"
);

// Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
    die(formatErrors(sqlsrv_errors()));
}

// Select Query
$tsql = "SELECT @@Version AS SQL_VERSION";

// Executes the query
$stmt = sqlsrv_query($conn, $tsql);

// Error handling
if ($stmt === false) {
    die(formatErrors(sqlsrv_errors()));
}
?>

<h1> Results : </h1>

<?php
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    echo $row['SQL_VERSION'] . PHP_EOL;
}

sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);

function formatErrors($errors)
{
    // Display errors
    echo "Error information: <br/>";
    foreach ($errors as $error) {
        echo "SQLSTATE: ". $error['SQLSTATE'] . "<br/>";
        echo "Code: ". $error['code'] . "<br/>";
        echo "Message: ". $error['message'] . "<br/>";
    }
}
?>