Aby połączyć się za pomocą skryptu PHP z bazą postawioną na serwerze MS SQL należy doinstalować bibliotekę dblib poprzez wykonanie polecenia:
apt-get install php5-sybase
lub
apt-get install php7.0-sybase
A następnie zainstalować:
apt-get install unixodbc tdsodbc
Po zainstalowaniu tych pakietów należy je ustawić.
Do pliku /etc/odbc.ini
(który powinien być pusty) dopisujemy:
# Define a connection to a Microsoft SQL server
# The Description can be whatever we want it to be.
# The Driver value must match what we have defined in /etc/odbcinst.ini
# The Database name must be the name of the database this connection will connect to.
# The ServerName is the name we defined in /etc/freetds/freetds.conf
# The TDS_Version should match what we defined in /etc/freetds/freetds.conf
[mssql]
Description = MSSQL Server
Driver = freetds
Database = XXXXXX
ServerName = MSSQL
TDS_Version = 7.1
Do pliku /etc/odbcinst.ini
dopisujemy:
# Define where to find the driver for the Free TDS connections.
# Make sure you use the right driver (32-bit or 64-bit).
[freetds]
Description = MS SQL database access with Free TDS
Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so
#Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup = /usr/lib/i386-linux-gnu/odbc/libtdsS.so
UsageCount = 1
A do /etc/freetds/freetds.conf
(lub w /etc/freetds.conf
)
# The basics for defining a DSN (Data Source Name)
# [data_source_name]
# host = <hostname or IP address>
# port = <port number to connect to - probably 1433>
# tds version = <TDS version to use - probably 8.0>
# Define a connection to the Microsoft SQL Server
[mssql]
host = XXXXXX
port = 1433
tds version = 7.1
Zmieniamy tds version = 7.1
w zależności od wersji.
Wersja FreeTDS | Obsługiwana wersja Microsoft SQL Server | Obsługiwana najwyższa wersja TDS | Data zakończenia rozszerzonego wsparcia technicznego Microsoft |
---|---|---|---|
1.00 | 2016 | 7.4 | July 9th, 2024 |
1.00 | 2014 | 7.4 | July 9th, 2024 |
1.00 | 2012 | 7.4 | July 12th, 2022 |
0.95 | 2008 | 7.3 | July 9th, 2019 |
0.91 | 2005 | 7.2 | April 12th, 2016 |
0.82 | 2000 | 7.1 | April 9th, 2013 |
0.64 | 2000 | 7.1 | April 9th, 2013 |
Dla sprawdzenia konfiguracji można tworzymy skrypt php:
<?php
try {
$hostname = "myhost";
$port = 10060;
$dbname = "tempdb";
$username = "dbuser";
$pw = "password";
$dbh = new PDO ("dblib:host=$hostname:$port;dbname=$dbname","$username","$pw");
} catch (PDOException $e) {
echo "Failed to get DB handle: " . $e->getMessage() . "\n";
exit;
}
$stmt = $dbh->prepare("select name from master..sysdatabases where name = db_name()");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
?>
Otwieramy go na stronie lub z linii poleceń na serwerze.
Ważne aby serwer MS SQL miał uruchomiony serwis SQL Server Browser.
Źródła:
https://www.php.net/manual/en/ref.pdo-dblib.php
https://stackoverflow.com/questions/20163776/connect-php-to-mssql-via-pdo-odbc
https://www.freetds.org/userguide/choosingtdsprotocol.htm