only support ubuntu 18.04 20.04 22.04
sudo apt update
sudo apt install gnupg
sudo curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
sudo curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list
sudo apt update
sudo ACCEPT_EULA=Y apt-get install -y msodbcsql18
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
sudo apt-get install -y unixodbc-dev
sudo apt install php-odbc
sudo service apache2 restart
cat /etc/odbcinst.ini
configure driver name specified in odbcinst above
#example
$odbc = odbc_connect('DRIVER={ODBC Driver 18 for SQL Server};SERVER=<server>;DATABASE=<db>;TrustServerCertificate=yes', 'sa', '<password>');
sqlcmd -S host -U user -P pass -C
Note: TrustServerCertificate is required, else it will get ssl error
https://learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver16&tabs=ubuntu18-install%2Calpine17-install%2Cdebian8-install%2Credhat7-13-install%2Crhel7-offline
for ubuntu 24.04:
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys EB3E94ADBE1229CF
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/keyrings/microsoft.gpg
sudo nano /etc/apt/sources.list.d/microsoft-prod.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/ubuntu/24.04/prod noble main
ssl provider: unsupported protocol
odbc 18 not support older sql server, because it requires tls1.2+ (sql 2014/older)
upgrade to sql server 2008 sp4, windows KB4057114, or use odbc 13
odbc 17 not support ubuntu 24.04, use driver for 22.04 seems fine
/etc/apt/sources.list.d/mssql-release.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/ubuntu/22.04/prod jammy main
odbc 13 only support ubuntu 16.04 or lower, proxmox only support container ubuntu 20.04 or higher, need to install on vm
alternatively use freetds, with encryption = off in /etc/freetds/freetds.conf
use tsql to confirm
tsql -S <host> -U <user> -P <password>
tsql -H <host> -p 1433 -D master -U <user> -P <password>
use odbc – freetds in php not support parameterized query
$odbc = odbc_connect("Driver=FreeTDS;Server=<host>;Port=1433; Database=<db>;Encryption=off", "<user>", "<password>");
use pdo – odbc – freetds to fix it
$dsn = 'odbc:Driver=FreeTDS;Server=<host>;Port=1433;Database=<db>; Encryption=off';
$pdo = new PDO($dsn, $username, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);