Skip to content
Advertisement

PHP unable to identify sqlsrv_connect() function while trying to connect SQL Server

I’m trying to connect to my local SQL Server from a simple PHP file using the sqlsrv_connect() function, but every time I’m calling the file in the browser through localhost, it’s throwing a 500 (Internal Server Error) saying:

PHP Fatal error: Uncaught Error: Call to undefined function sqlsrv_connect() in C:inetpubwwwrootAJAX_Tutorialget_db_data.php:4

get_db_data.php is the file from which I’m trying to connect the server. Seems like PHP or the localhost can’t identify the sqlsrv_connect() function. But as far I’m concerned, I did all the needful to make sure PHP connects the SQL Server.

My environment: Windows 10 Pro, Version 21H2, 64-bit.

What I have done:

  1. Enabled IIS ensuring CGI/Fast CGI is working.
  2. Installed PHP 8.1.1 non-thread safe x64 version at C:Program FilesPHP-8.1.1
  3. In C:Program FilesPHP-8.1.1, renamed php.ini-development file to php.ini
  4. In the php.ini file, uncommented the extension_dir = “ext” directive.
  5. Downloaded php_wincache.dll and added it to the default ext directory of PHP.
  6. Added the line extension=php_wincache.dll at the Dynamic Extensions section of the php.ini file.
  7. Installed PHPManagerForIIS_V1.5.0 and configured IIS accordingly so that PHP can be hosted through IIS. Also enabled the php_wincache.dll extension here.
  8. Installed SQL Server 2019 Developer Edition along with the respective Management Studio.
  9. Created the respective database and tables in SQL Server that I want to connect to from PHP.
  10. Ensured Microsoft ODBC Driver 17 for SQL Server is installed in my PC, that is required by PHP.
  11. Ensured Microsoft SQL Server 2012 Native Client is installed in my PC, that is required by PHP.
  12. Downloaded Microsoft Drivers for PHP for SQL Server 5.9 and extracted its contents. Copied the file named php_sqlsrv_80_nts_x64.dll in the package and pasted it in the default ext directory of PHP.
  13. Added the line extension=php_sqlsrv_80_nts_x64.dll at the Dynamic Extensions section of the php.ini file.
  14. In IIS Manager, through PHP manager, enabled the php_sqlsrv_80_nts_x64.dll extension. Created a phpinfo.php file in the root of the IIS, which ran successfully but found no mention of wincache and sqlsrvin it.

After the steps above, I ran the actual PHP file trying to connect the SQL Server, but it’s throwing an error saying it can’t identify the sqlsrv_connect() function. Assuming the php_sqlsrv_80_nts_x64.dll not being loaded while PHP is starting, I ran php –ini in the command prompt.

That’s when the following messages are being thrown:

PHP Warning: PHP Startup: Unable to load dynamic library ‘php_wincache.dll’ (tried: extphp_wincache.dll (The specified module could not be found), extphp_php_wincache.dll.dll (The specified module could not be found)) in Unknown on line 0

Warning: PHP Startup: sqlsrv: Unable to initialize module
Module compiled with module API=20200930
PHP compiled with module API=20210902
These options need to match
in Unknown on line 0

Configuration File (php.ini) Path:
Loaded Configuration File: C:Program FilesPHP-8.1.1php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)

However, PHP seems to be running fine, because when I used jQuery AJAX get() and post() method from an HTML file to fetch data from another PHP file, I was successful in doing so. No exception was thrown then.

So what am I missing now that neither php_wincache.dll and sqlsrv seem to load during PHP startup, nor can I connect the SQL Server from the PHP file? As I’m new jQuery AJAX and PHP, I’m not much aware of the intricacies of them and hence, stuck with the issue for the past four days. I’ve used every resource in my hand, but nothing is working. Please help. I can’t get ahead with my tasks because of this.

get_db_data.php code:

<?php
    $serverName = "(local)";    // Optionally use port number (1433 by default).
    $connectionString = array("Database"=>"TestDB");    // Connection string.
    $conn = sqlsrv_connect($serverName, $connectionString); // Connect using Windows Authentication.

    if($conn === false) {
        echo "Connection could not be established.<br/>";
        die(print_r(sqlsrv_errors(), true));
    } else {
        echo "Connection established successfuly.<br/>";
    }

    sqlsrv_close($conn);    // Close connection resources.
?>

Thanks and Regards!

Advertisement

Answer

I found the root of the problem, i.e., version mismatch. While I was using PHP-8.1, I downloaded the SQLSRV for PHP-8.0. Because of this match the driver file wasn’t loading during the start of the PHP in the server. Downgrading to PHP-8.0 solved the issue.

User contributions licensed under: CC BY-SA
8 People found this is helpful
Advertisement