Keywords: PHP | SQL Server | WAMP | sqlsrv extension | php.ini configuration
Abstract: This article provides a comprehensive analysis of the 'Call to undefined function sqlsrv_connect()' error when connecting PHP to SQL Server. It focuses on correct php.ini configuration in WAMP environments, SQL Server driver version compatibility checks, and extension loading verification methods. Through practical code examples and system diagnostic steps, it helps developers quickly identify and resolve this common issue.
Problem Background and Error Analysis
In PHP development environments, when attempting to connect to SQL Server databases using the sqlsrv_connect() function, developers frequently encounter the fatal error "Call to undefined function sqlsrv_connect()". This error indicates that the PHP interpreter cannot recognize the sqlsrv_connect function, typically due to the SQL Server extension failing to load properly.
Configuration Challenges in WAMP Environment
In WAMP server environments, the presence of multiple php.ini configuration files is the primary cause of extension loading failures. Specifically:
- The PHP folder under the WAMP installation directory contains one
php.inifile - The Apache bin directory contains another
php.inifile
When executing PHP scripts through the web server, Apache uses the php.ini file in its bin directory, not the one in the PHP directory.
Correct Configuration Steps
To resolve this issue, follow these steps:
Step 1: Locate the Correct php.ini File
First, determine the currently used php.ini file path by creating a PHP file with the following code:
<?php
phpinfo();
?>
Look for the "Loaded Configuration File" item in the output, which shows the actual php.ini file path loaded by Apache.
Step 2: Add SQL Server Extension
Add the SQL Server extension configuration to the correct php.ini file. Based on the PHP version and system architecture, add the appropriate extension line:
extension=c:/wamp/bin/php/php5.4.16/ext/php_sqlsrv_53_ts.dll
Note that the numbers in the extension filename indicate compatible PHP version and thread safety settings.
Step 3: Restart Apache Service
After modifying the php.ini file, you must restart the Apache service for the changes to take effect. In WAMP server, this can be done through the system tray icon or service manager.
Verifying Extension Loading
After configuration, verify that the SQL Server extension has loaded successfully using the following methods:
Method 1: Using phpinfo() Function
Run phpinfo() again and search for the "sqlsrv" section in the output. If the extension loads successfully, you should see output similar to:
[PHP Modules]
bcmath
calendar
Core
...
SPL
sqlsrv
standard
...
Method 2: Command Line Verification
Use command line tools to verify extension loading status:
php -d display_startup_errors=1 -d error_reporting=-1 -d display_errors -c "C:\Path\To\php.ini" -m
This command lists all loaded PHP modules, which should include sqlsrv.
Compatibility Considerations
When selecting SQL Server drivers, ensure compatibility with the PHP version:
- PHP 5.4.x requires corresponding SQL Server driver versions
- Check thread-safe (TS) vs non-thread-safe (NTS) versions
- Confirm system architecture (32-bit or 64-bit) matches
Complete Connection Example
After the extension loads successfully, use the following code to establish a SQL Server connection:
<?php
$serverName = "xxx-PC\SQLExpress";
$connectionOptions = array(
"Database" => "Salesforce",
"Uid" => "username",
"PWD" => "password"
);
$conn = sqlsrv_connect($serverName, $connectionOptions);
if($conn === false) {
die(print_r(sqlsrv_errors(), true));
} else {
echo "Connection successful";
}
?>
Troubleshooting Techniques
If the problem persists, consider the following troubleshooting steps:
- Check Apache error logs for startup error messages
- Confirm the extension file path is correct and the file exists
- Verify PHP version compatibility with extension version
- Check if the system PATH environment variable includes the PHP directory
Conclusion
The key to resolving the "Call to undefined function sqlsrv_connect()" error lies in correctly configuring the php.ini file and ensuring successful loading of the SQL Server extension. By carefully checking configuration file locations, extension compatibility, and service restarts, developers can quickly resolve this common technical issue and successfully establish database connections between PHP and SQL Server.