Connection between MSSQL and PHP 5.3.5 on IIS is not working
Solution 1
This is a snippet from a customer FAQ I wrote up a wee while ago to help our dedicated hosting customers get PHP up and running with the MS SQL Drivers. It may duplicate some knowledge already imparted in the comments above, but it's completeness may also help others starting from scratch:
Note: Clearly the PHP version numbers have moved on a bit since I wrote this but the general principles still apply.
Installation Pre-requisite: The SQL Native Client is required for the Microsoft Drivers for PHP for SQL Server:
Microsoft SQL Server 2008 R2 Native Client X64 - for 64 bit Windows
or
Microsoft SQL Server 2008 R2 Native Client X32 - for 32 bit Windows
Download and install the Native Client driver that matches your system.
PHP MS SQL Drivers:
Download the Microsoft Drivers for PHP for SQL Server:
The file is a self-extracting executable so just use 7zip or WinRAR and extract the files to a folder of your choice. We now need to decide which driver to choose that matches your PHP installation.
PHP 5.3.5 comes in four different flavours:
- PHP 5.3.5 Non-threadsafe VC9
- PHP 5.3.5 Non-threadsafe VC6
- PHP 5.3.5 Threadsafe VC9
- PHP 5.3.5 Threadsafe VC6
To tell which version you have installed open the snapshot.txt
file which lives in the same folder as php.exe
, php-cgi.exe
etc. Don't use notepad.exe because the file uses just line feed (\n
) for line ends (unix format) at the start and notepad mangles these into a single line.
In the file you will see a line (around line 6, or near the middle of line 1 of you did use notepad) starting with: Build:
:
Build: D:\php-sdk\snap_5_3\vc9\x86\obj\Release - non-threadsafe, VC9 build Build: D:\php-sdk\snap_5_3\vc6\x86\obj\Release - non-threadsafe, VC6 build Build: D:\php-sdk\snap_5_3\vc9\x86\obj\Release_TS - threadsafe, VC9 build Build: D:\php-sdk\snap_5_3\vc6\x86\obj\Release_TS - threadsafe, VC6 build
This tells us what version of PHP you're running.
From the folder you extracted the MS SQL PHP drivers, choose the driver(s) that matches the version of PHP being used (if you're not using PDO then you don't need to copy the php_pdo_
drivers):
PHP 5.3.5 Non-threadsafe VC9: php_sqlsrv_53_nts_vc9.dll, php_pdo_sqlsrv_53_nts_vc9.dll PHP 5.3.5 Non-threadsafe VC6: php_sqlsrv_53_nts_vc6.dll, php_pdo_sqlsrv_53_nts_vc6.dll PHP 5.3.5 Threadsafe VC9: php_sqlsrv_53_ts_vc9.dll, php_pdo_sqlsrv_53_ts_vc9.dll PHP 5.3.5 Threadsafe VC6: php_sqlsrv_53_ts_vc6.dll, php_pdo_sqlsrv_53_ts_vc6.dll
Assuming your PHP installation lives in C:\PHP
, copy (DON'T MOVE) these files to your C:\PHP\EXT
folder.
Open C:\PHP\PHP.INI
and locate the Dynamic Extensions
part of the file and add:
extension=php_sqlsrv_53_nts_vc9.dll extension=php_pdo_sqlsrv_53_nts_vc9.dll <-- optional
Finally, to be sure that PHP can find these extensions, ensure the extension_dir
directive in C:\PHP\PHP.INI
is set to C:\PHP\EXT
:
extension_dir = C:\PHP\ext
Restart IIS and call phpinfo()
. If all is well you should see:
And if you also loaded the PDO driver you should see:
Solution 2
The above mentioned:
extension=php_sqlsrv_53_nts_vc9.dll
extension=php_pdo_sqlsrv_53_nts_vc9.dll
what I found is incorrect.
Therefore, it is likely to be:
extension=php_sqlsrv_53_ts_vc9.dll
extension=php_pdo_sqlsrv_53_ts_vc9.dll
Naner
Updated on April 04, 2020Comments
-
Naner about 4 years
I recently installed IIS, PHP 5.3.5 and MySQL, and had it all working.
I then has a requirement for MS SQL as well, and what I thought would be an easy task, is now driving me crazy and I can't figure out how to make it work.
According to
php_info()
the MS SQL drivers aren't loading.I downloaded
php_mssql.dll
and enabled it inphp.ini
but it didn't work. I found out that the new version of PHP uses a different dll. So I downloaded the new one, put that in the ext folder, and updated thephp.ini
, but still no luck.php_info()
still isn't showing the drivers are loaded.I am about to uninstall IIS and PHP, and install Apache, which I've installed before.
This question is my last attempt, can anyone help?
-
Naner about 13 yearsAwesome, thank you. Does that mean that the mssql_ functions are no longer available??
-
Kev about 13 years@Naner - thanks :). Yes, you need to use the
sqlsrv_
functions instead, which nearly map onto themssql_
functions but there are some differences: msdn.microsoft.com/en-us/library/cc296152.aspx -
hsuk almost 12 yearsHow am I supposed to set up this sqlsrv driver on linux ? Please find my answer on the link below and please give me necessary suggestions.stackoverflow.com/questions/11839368/…
-
Kev almost 12 years@KusH - The driver's described above are Windows only. I have to be honest and say that I've never had a use case for accessing MS SQL from PHP on Unix. You could have a look at: stackoverflow.com/questions/3684782/… to see if that helps any.
-
Kev almost 9 years@hotohoto not tried but I would guess so. The problem tends to be with PHP drivers lagging behind PHP releases.