SQL Server Driver

De Wiki de Jordan LE NUFF
< Technique‎ | PHP
Sauter à la navigation Sauter à la recherche
(Page créée avec « == Présentation == Cette page a pour objet de décrire comment implémenter une connexion PDO depuis PHP vers un serveur SQL Server de chez Microsoft. == Objectif == L'o… »)
 
 
Ligne 1 : Ligne 1 :
 
== Présentation ==
 
== Présentation ==
Cette page a pour objet de décrire comment implémenter une connexion PDO depuis PHP vers un serveur SQL Server de chez Microsoft.
+
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 ==
 
== Objectif ==
L'objectif premier est mettre en oeuvre une connexion PDO depuis PHP 7 vers un serveur SQL Server de version 2005 minimum.
+
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.
 
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 [https://www.php.net/manual/fr/ref.pdo-mysql.php PDO pour MySQL], il existe une interface [https://www.php.net/manual/fr/ref.pdo-sqlsrv.php 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 [https://www.php.net/manual/fr/ref.pdo-odbc.php 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 <code>sqlsrv</code>.
 +
 +
Pour activer les connecteur PDO pouvant se connecter à un serveur SQL Serveur, il faut installer l'extension <code>pdo_sqlsrv</code>.
 +
 +
Pour ce faire, il faut s'appuyer sur [https://pecl.php.net/ PECL (PHP Extension Community Library)], un dépôt d'extensions PHP qui est disponibles via le système de paquet [https://pear.php.net/ PEAR (PHP Extension and Application Repository)]. Cela va compiler les extensions dont il est question.
 +
 +
Pour mettre à jour automatiquement le fichier <code>php.ini</code>, 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 <code>sqlsrv</code> :
 +
pecl install sqlsrv
 +
 +
Installer l'extension <code>pdo_sqlsrv</code> :
 +
pecl install pdo_sqlsrv
 +
 +
Pour vérifier la bonne prise en prise en compte :
 +
{{terminal|text=
 +
[myuser@myserver mydir]# php -m{{!}}grep -i sqlsrv
 +
pdo_sqlsrv
 +
sqlsrv
 +
}}
 +
 +
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 :
 +
<syntaxhighlight lang="php">
 +
<?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/>";
 +
    }
 +
}
 +
?>
 +
</syntaxhighlight>

Version actuelle datée du 3 avril 2020 à 07:20

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/>";
    }
}
?>