【问题标题】:Unable to setup MS SQL server access via PHP无法通过 PHP 设置 MS SQL 服务器访问
【发布时间】:2021-04-08 21:18:20
【问题描述】:

设置:

  • Windows 10 专业版 x64
  • PHP 版本:7.2.10
  • 已安装 ODBC v17

php_sqlsrv_7_nts_x64.dll 和 php_sqlsrv_7_ts_x64.dll(所有 dll 都在 C:\xampp\php\ext 中)

加载的配置文件 C:\xampp\php\php.ini

php.ini:

line 1965 of php.ini:
extension=php_sqlsrv_7_nts_x64.dll

lines 910-913: (previoius attempt)
[PHP_SQLSRV]
;extension=php_sqlsrv.dll
extension_dir = "C:\xampp\php\ext"  
extension=php_sqlsrv_7_ts_x64.dll

cmd iisreset 和 Apache 服务器在每次尝试之间重新启动

但我得到了

致命错误:未捕获错误:调用未定义函数 sqlsrv_connect()

我也完全关闭了 xampp 并重新启动了很多次。

需要明确的是,C:\Windows 中没有 php.ini 文件 通过 Xampp 的配置按钮打开 php.ini 会打开 C:\xampp\php\php.ini,这就是我一直在修改的文件。

这现在出现在 PHP 信息中:

[08-Apr-2021 22:20:04 UTC] PHP Warning:  PHP Startup: Unable to load dynamic library 'php_sqlsrv_7_ts_x86' (tried: C:\xampp\php\ext\php_sqlsrv_7_ts_x86 (The specified procedure could not be found.), C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) in Unknown on line 0

[2021 年 4 月 8 日 22:20:04 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(指定的过程无法找到。),C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll(找不到指定的模块。))在第0行的未知 [08-Apr-2021 22:20:04 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_pdo_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_pdo_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_pdo_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:05 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:05 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:05 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_pdo_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_pdo_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_pdo_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 15:20:07 America/Los_Angeles] PHP 致命错误:未捕获的错误:调用 C:\xampp\htdocs\chart\ms_sql_test.php:19 中的未定义函数 sqlsrv_connect() 堆栈跟踪: #0 {主要} 在第 19 行的 C:\xampp\htdocs\chart\ms_sql_test.php 中抛出 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_pdo_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_pdo_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_pdo_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [08-Apr-2021 22:20:22 UTC] PHP 警告:PHP 启动:无法加载动态库 'php_pdo_sqlsrv_7_ts_x86'(尝试:C:\xampp\php\ext\php_pdo_sqlsrv_7_ts_x86(找不到指定的过程。) , C:\xampp\php\ext\php_php_pdo_sqlsrv_7_ts_x86.dll (The specified module could not be found.)) 在 Unknown on line 0 [2021 年 4 月 8 日 15:20:23 America/Los_Angeles] PHP 致命错误:未捕获的错误:调用 C:\xampp\htdocs\chart\ms_sql_test.php:19 中的未定义函数 sqlsrv_connect() 堆栈跟踪: #0 {主要} 在第 19 行的 C:\xampp\htdocs\chart\ms_sql_test.php 中抛出 [08-Apr-2021 15:20:25 America/Los_Angeles] PHP 致命错误:未捕获的错误:调用 C:\xampp\htdocs\chart\ms_sql_test.php:19 中的未定义函数 sqlsrv_connect() 堆栈跟踪: #0 {主要} 在第 19 行的 C:\xampp\htdocs\chart\ms_sql_test.php 中抛出

【问题讨论】:

  • 我猜,你编辑了错误的 php.ini 文件。 C:\xampp\php\php.ini 真的是 apache 使用的 php.ini 文件吗?
  • 一个 dll 是线程安全的 (ts) 而另一个不是 (nts,),这可能是您的问题。检查您的 php 是 ts 还是 nts 并下载正确的 dll ;)
  • 谢谢,我现在会仔细检查这两个!
  • re: 对不起,我已经尝试了所有 4 个 dll,但都没有工作。 PHP Info 说线程安全已启用,所以我将保留 php_sqlsrv_7_ts_x86.dll,因为 PHP info 实际上报告的是架构 x86
  • @Larnu,这不是 PHP 信息的加载配置文件指向的那个吗?

标签: php sql-server apache


【解决方案1】:

此问题已通过更正 Microsoft 的 dll 版本来解决,该版本旨在与我拥有的 PHP 版本一起使用。

我的 PHP 是 v7.2 php_sqlsrv_7_XX_XX.dll 不适用于 PHP 7.2

我不得不从https://pecl.php.net/package/sqlsrv/5.9.0preview1/windows 下载 php_sqlsrv.dll 匹配我的 PHP v7.2

这样做然后更新配置立即解决了问题(在 Apache 重新启动后)!

请查看https://docs.microsoft.com/en-us/sql/connect/php/system-requirements-for-the-php-sql-driver?view=sql-server-ver15#driver-versions 以获取正确版本的 MS dll 以匹配您正在运行的 PHP 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多