Tags voor dit FAQ item:
Debian PHP

In welke mate heeft dit artikel uw vraag beantwoordt?

Score van 0 sterren, gebaseerd op 1 beoordelingen

Verbinding maken met Microsoft SQL Server op Debian via FreeTDS

Laatste bijgewerkt: 25/01/2016

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.

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

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.

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

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!