Laatst bijgewerkt op 28 sep 2023 10:18:04.
Categorie:
Cloud servers
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!
Werden niet al uw vragen beantwoord?
Geen nood, via een support aanvraag helpen wij u graag verder!