Verbinding maken met Microsoft SQL Server op Debian via FreeTDS

Laatst bijgewerkt op 28 sep. 2023 10:18:04.
Categorie: Cloud servers

Debian PHP

Mssql freetds php debian

Inleiding

Dit artikel legt uit welke stappen er nodig zijn om verbinding te maken vanuit PHP op een Debian linux server naar een Microsoft SQL Server database.

Er wordt gebruik gemaakt van FreeTDS, unixODBC.

Installatie van de benodigde packages met apt-get

Volgende Debian packages zijn nodig:

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

Zoals u ziet is er inderdaad php5-sybase nodig! Dit is geen fout :-)

Installatie van de packages kan u eenvoudig via een commando op één lijn, met apt-get install

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

Herstart na installatie de webservice (apache2):

sudo service apache2 restart

Testen van de FreeTDS verbinding naar Microsoft SQL Server met tsql

Nagaan of de installatie van alle componenten (freetds, unixodbc) correct verlopen is kan via het tsql commando:

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

Als u een verbinding krijgt, werken de componenten. U kan een query testen via:

USE database
GO
SELECT * FROM Table;
GO
EXIT

Opgelet, als u een selectie doet op een nvarchar of ntext veld kan u een foutmelding krijgen: "Unicode data in a Unicode-only collation or ntext data cannot be sent to clients using DB-Library (such as ISQL) or ODBC version 3.7 or earlier".
Dit is normaal, u kan dit oplossen door het freetds.conf (de FreeTDS configuratie) aan te passen.

sudo vi /etc/freetds/freetds.conf

U kan een sectie toevoegen aan het config bestand voor uw eigen database server of instance:

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

Door als TDS versie "8.0" op te geven vermijdt u de Unicode foutmelding.

Test de FreeTDS verbinding aan de hand van server of instance naam

U kan nu opnieuw het tsql commando uitvoeren, ditmaal met de -S parameter in plaats van -H.
Zo verbindt u op server name of instance name in plaats van de volledige hostnaam, en zal FreeTDS gebruik maken van de door u opgegeven parameters waaronder de TDS versie.

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

Testen van een verbinding vanuit PHP naar Microsoft SQL Server

De laatste stap is testen van uw verbinding vanuit PHP. Dit kan op verschillende manieren: via de PDO extensies, via mssql...

Onderstaand voorbeeld geeft weer hoe dit kan via PDO:

<?php
 
$db = new \PDO('dblib:host=yoursqlserver.poweredby.kinamo.be;dbname=database', 'username', 'password');
return $db;

?>

Opgelet, als u een fout krijgt: PDOException "could not find driver" maakt u mogelijk verbinding met PDO('mssql...); in plaats van PDO('dblib...);

Het hangt af van uw OS welke driver u dient te gebruiken, op Debian is dit dblib!


Gerelateerde artikels

Extra hulp nodig?

Werden niet al uw vragen beantwoord?
Geen nood, via een support aanvraag helpen wij u graag verder!

Selecteer uw taal

Alle talen: