Linux - PHP 7.0 and MSSQL (Microsoft SQL) Linux - PHP 7.0 and MSSQL (Microsoft SQL) sql-server sql-server

Linux - PHP 7.0 and MSSQL (Microsoft SQL)


Microsoft has PHP Linux Drivers for SQL Server for PHP 7 and above on PECL. These are production ready. To download them, follow these steps:

Ubuntu 16.04:

sudo su curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.listexitsudo apt-get updatesudo ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools unixodbc-devsudo pecl install sqlsrvsudo pecl install pdo_sqlsrvecho "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

CentOS 7:

sudo sucurl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repoexitsudo yum updatesudo ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel sudo yum groupinstall "Development Tools"sudo pecl install sqlsrvsudo pecl install pdo_sqlsrvecho "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

This will install the PHP SQL Server Drivers and register them in the php.ini folder.

Verify that it works by using the following sample

<?php$serverName = "localhost";$connectionOptions = array(    "Database" => "SampleDB",    "Uid" => "sa",    "PWD" => "your_password");//Establishes the connection$conn = sqlsrv_connect($serverName, $connectionOptions);if($conn)    echo "Connected!"?>

Links for reference:


The sybase of PHP7 contains the pdo_dblib module.

sudo apt install php7.0-sybase


tldr; sqlsrv and pdo_sqlsrv php extentions were very slow with large queries with lots of parameters, but installing and using pdo-dblib resolved the issue for me.

Running on php framework laravel 5.1 and 5.6 (on php 7.1 and 7.2) on Ubunutu 16.04. I found that the packages sqlsrv and pdo_sqlsrv did not work well for large queries. I had a large query with 30 bound variables. Sql Server 2008 converted all of the bound variables to nvarchar(4000) causing the db to do loads of casting taking forever.

I then disable the sqlsrv.so and pdo_sqlsrv.so extentions and installed pdo-dblib extension with:

sudo apt-get install php7.2-pdo-dblib

Then the query processed much quicker.

For more information:

Under the hood laravel uses a PDOStatement like this:

$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);$stmt = $conn->prepare( $query );$stmt->execute($param);

where a direct query like

$conn = new PDO( "dblib:host=$host:1433;dbname=$db;", $uid, $pwd);$results = $conn->query( $query_with_parameter_already_bound );

would work fine.