php - fatal error : Uncaught Error: Call to undefined function sqlsrv_connect()

标签 php sql apache pdo php-7

我正在尝试连接到我们可以通过“Microsoft SQL Server Management Studio”访问的 SQL Server:

enter image description here

我已经尝试了很多我在 SO 上看到的不同的东西,但没有任何效果。我收到错误 fatal error :未捕获错误:调用 C:\Apache24\htdocs\test.php:52 中未定义的函数 sqlsrv_connect() 堆栈跟踪:#0 {main} 抛出在 C:\Apache24\htdocs\中在 test.php 页面上运行以下代码时,第 52 行的 test.php 上:

$serverName = "SERVER.DOMAIN.COM, 1433"; //serverName\instanceName, portNumber (default is 1433)
$connectionInfo = array( "Database"=>"DB_NAME", "UID"=>"USER", "PWD"=>"PASS");
$ma_conn = sqlsrv_connect( $serverName, $connectionInfo);

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

我的 php.ini 文件已启用许多不同的扩展,但没有一个起作用。我已尝试以下所有方法:

extension = php_sqlsrv_56_ts.dll
extension=php_sqlsrv_55_ts.dll
extension=php_sqlsrv_55_nts.dll
extension=php_sqlsrv_55_ts.dll
extension=php_pdo_sqlsrv_55_ts.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll

目前我有:

extension_dir = "c:\apache24\php7\ext\"
extension=php_pdo.dll
extension=php_pgsql.dll
[PHP_SQLSRV]
extension=php_sqlsrv_54_ts.dll
[PHP_PDO_SQLSRV]
extension=php_pdo_sqlsrv_54_ts.dll

在 CMD 中使用 Apache 和 PHP 的机器上,我得到以下信息:

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Windows\system32>php -c c:\apache24\php7\php.ini -v -display_startup_errors=1

PHP Warning:  PHP Startup: Unable to load dynamic library 'c:\apache24\php7\ext\ php_pdo.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library 'c:\apache24\php7\ext\ php_sqlsrv_54_ts.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0 PHP
Warning:  PHP Startup: Unable to load dynamic library 'c:\apache24\php7\ext\ php_pdo_sqlsrv_54_ts.dll' - %1 is not a valid Win32 application.
 in Unknown on line 0
PHP 7.0.10 (cli) (built: Aug 18 2016 09:48:53) ( ZTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

C:\Windows\system32>

我还在 C:\Apache24\php7\ext 文件夹中下载并运行了 SQLSRV32.EXE

我有:

  • Windows Server 2012 RS win64
  • Apache 2.4.23 win64
  • PHP 7.0.10 win64
  • Microsoft SQL Server 2012 native 客户端 win64
  • Microsoft Visual C++ 2012 x64 和 x86 可再发行组件(两种不同)
  • Microsoft Visual C++ 2015 可再发行组件(x64 和 x86)- 14.0.23026
  • 适用于 SQL Server 的 Microsoft ODBC 驱动程序 11

enter image description here

enter image description here

最佳答案

根据 php.ini (php_sqlsrv_XX_ts.dll) 中的尝试列表,您已激活 PHP v5.5 和 v5.6 的扩展。但是,由于您运行的是 PHP 7.0,因此需要下载并激活相应的 Microsoft Drivers for PHP for SQL Server 。看来您需要下载驱动程序版本4.0php.net page for SQLSRV extension 上对此进行了说明。 .

The SQLSRV extension is supported by Microsoft and available for download here: http://msdn.microsoft.com/en-us/sqlserver/ff657782.aspx.

在这里您可以找到 Loading the PHP SQL Driver 的说明。您可能会收到一个类似 php_sqlsrv_7_XX.dll 的文件,其中包含 XX:“ts”或“nts”(线程安全或非线程安全)。我认为你需要线程安全版本。

否则,请使用 MS SQL Server (PDO) PDO 驱动程序(阅读链接中的“安装”部分!),带有 PDO_SQLSRV DSN (连接字符串)和 PDO一般功能,例如所有驾驶员共有。然后,驱动程序将作为 extension=php_pdo_sqlsrv_7_ts.dll 添加到 php.ini(查看同一页面的说明:Loading the PHP SQL Driver)。如果你问我,我真的会选择这个选项。

Nota Bene:每次配置更改后,不要忘记重新启动 Web 服务器和/或数据库服务!

祝你好运。

关于php - fatal error : Uncaught Error: Call to undefined function sqlsrv_connect(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47103452/

相关文章:

php - 对 php 页面进行 ajax 调用

mysql - SQL从多个表中获取值然后对其进行排序

python - SQLAlchemy 不区分大小写基于 IN 的搜索查询?

c - Apache 服务器中的日常任务

php - 从 Symfony2 中的 http_basic auth 注销

php - Laravel Eloquent whereIn,从数据库中检索记录,包括缺失日期

php - 在 PHP 中压缩 PNG 文件

sql - 在联合表中搜索

java - 无法使用 apache poi 从 Excel 文件读取

java - 如何在同一服务器环境中运行 PHP 和 Tomcat?