SQL Server Driver
Sommaire
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 :
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/>";
}
}
?>