Yes, I know that PHP 7.0 removed the extensions needed to connect to MSSQL. FreeTDS was my option prior to PHP 7.0 but now there really is no obvious upgrade path for those needing to still connect to MSSQL.
Stupid question, but given that MSSQL is most certainly well used in enterprise environments, how are we supposed to connect to those databases beginning with PHP 7.0?
Am I overlooking something blatantly obvious or did the release of PHP 7 basically give a slap in the face to anyone needing to connect to MSSQL?
For clarity, I am NOT talking about connecting from a Windows server running PHP, I am needing to connect to MSSQL from a Linux server and thus would need a Linux ODBC driver.
Does anyone make such a thing that works with MSSQL 2012 and PHP 7.0 that can be had freely or for a fee?
It is odd to me that there isn’t much PHP 7 and MSSQL info to be had out there. Granted that PHP 7 is fresh off the presses, but there has to be more MSSQL shops out there (FWIW we use both).
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:
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.list exit sudo apt-get update sudo ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools unixodbc-dev sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv echo "extension=sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` echo "extension=pdo_sqlsrv" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
sudo su curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo exit sudo yum update sudo ACCEPT_EULA=Y yum install -y msodbcsql mssql-tools unixODBC-devel sudo yum groupinstall "Development Tools" sudo pecl install sqlsrv sudo pecl install pdo_sqlsrv echo "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
Official MS extension has branch for PHP 7:
- https://github.com/Azure/msphpsql/tree/PHP-7.0 (Windows)
There’s still lot of things missing, some marked as planned (Linux support is amongst them), nevertheless it could be another solution in the future.
EDIT (09-09-2016): There were already few Linux releases published since March, with CentOS/Ubuntu specific packages and source available. Keep in mind they aren’t marked as Production Ready yet.
I definitely agree with you. I work primarily with SQL Servers at work and do not understand why they are not including default drivers for SQL servers in PHP.
For linux, i’m not too sure what you previously used but I found that the “dblib” driver is the best driver to connect to SQL Servers.
But basically for a linux box you just want to run these few steps to have a sql server driver installed.
apt-get install freetds-dev -y vim /etc/freetds.conf
Then go ahead and add your connections there and restart apache and you should be good to go!
As per the answer above – the steps output a shared object (*.so) so the php.ini file needs the file extension too.
echo "extension=sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"` echo "extension=pdo_sqlsrv.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`
yum install freetds-dev vim /etc/freetds.conf
And modify freetds.conf, install php mssql module
yum install php-mssql.x86_64