Connexion avec Microsoft SQL Serveur à partir de PHP sur Debian via FreeTDS

Dernière mise à jour sur 28 sept. 2023 à 10:18:04.
Catégorie: Serveurs cloud

Debian PHP

Mssql freetds php debian

IntroductionCet

article explique les étapes nécessaires pour se connecter depuis PHP sur un serveur Linux Debian à une base de données Microsoft SQL Server.
Nous utiliserons FreeTDS et unixODBC à cette fin.

Installation des packages nécessaires avec apt-get

Les packages Debian suivants sont nécessaires :

freetds-bin - FreeTDS command-line utilities
freetds-common - configuration files for FreeTDS SQL client libraries
unixodbc - Basic ODBC tools
php5-sybase - Sybase / MS SQL Server module for php5

Comme vous pouvez le voir, php5-sybase est en effet nécessaire ! Ce n'est pas une erreur :-)
L'installation des packages est facile via une seule ligne de commande, avec apt-get install

sudo apt-get install freetds-common freetds-bin unixodbc php5-sybase

Après l'installation, redémarrez le service Web (apache2) :

sudo service apache2 restart

Test de la connexion FreeTDS à Microsoft SQL Server avec tsql

Vérifier si l'installation de tous les composants (freetds, unixodbc) s'est correctement terminée peut se faire via la commande tsql :

tsql -H yourserverhostname -p 1433 -U username -P password -D database

Si vous obtenez une connexion, les composants fonctionnent. Vous pouvez tester une requête via :

USE database
GO
SELECT * FROM Table;
GO
EXIT

Attention, si vous faites une sélection sur un champ nvarchar ou ntext vous pouvez avoir une erreur : "Les données Unicode dans un classement Unicode uniquement ou les données ntext ne peuvent pas être envoyées aux clients utilisant DB-Library (comme ISQL) ou ODBC version 3.7 ou plus tôt".
C'est normal, vous pouvez résoudre ce problème en éditant le fichier freetds.conf (la configuration FreeTDS).

sudo vi /etc/freetds/freetds.conf

Vous pouvez ajouter une section au fichier de configuration pour votre propre serveur ou instance de base de données :

# Kinamo SQL Server
[yoursqlserver]
 host = yoursqlserver.poweredby.kinamo.be
 port = 1433
 tds version = 8.0

En spécifiant la version "8.0" de TDS, vous évitez l'erreur Unicode.

Tester la connexion FreeTDS par nom de serveur ou d'instance

Vous pouvez maintenant exécuter à nouveau la commande tsql, cette fois avec le paramètre -S au lieu de -H.
Par exemple, vous vous connectez sur le nom du serveur ou le nom de l'instance au lieu du nom d'hôte complet, et FreeTDS utilisera les paramètres que vous avez spécifiés, y compris la version de TDS.

tsql -S yoursqlserver -U username -P password -D database

Tester une connexion de PHP à Microsoft SQL ServerLa

dernière étape consiste à tester votre connexion depuis PHP. Cela peut se faire de différentes manières : via les extensions PDO, via mssql...
L'exemple ci-dessous montre comment cela peut être fait via PDO
:<?php
 
$db = new \PDO('dblib:host=yoursqlserver.poweredby.kinamo.be;dbname=database', 'username', 'password');
return $db;

?>Attention
, si vous obtenez une erreur : PDOException "could not find driver" vous vous connectez peut-être à PDO('mssql...); au lieu de PDO('dblib...);
Cela dépend de votre système d'exploitation quel pilote vous devez utiliser, sur Debian c'est dblib !

Articles connexes

Les services gérés sous les feux de la rampe

Nos administrateurs système ont soulevé quelques cargos remplis de conteneurs de travail. (oui, ce jeu de mots était intentionnel, plus...

En savoir plus

Quelles sont les conditions pour enregistrer un nom de domaine .be?

Enregistrer un nom de domaine .be est simple. Toute personne physique ou morale peut enregistrer un nom de domaine .be...

En savoir plus

Apache - Désactiver SSL 2.0, SSL 3.0 et opter pour une configuration SSL moderne et sûre.

Cet article vous montre comment désactiver les protocoles SSL 2.0, SSL 3.0 et les anciennes versions de TLS sur votre...

En savoir plus

Besoin d'aide supplémentaire?

Vous n'avez pas obtenu de réponse à toutes vos questions?
Ne vous inquiétez pas, faites une demande d'assistance!

Kinamo

Sélectionnez votre langue

Toutes les langues: