首页  >  问答  >  正文

XAMPP/SQLSRV:无法在 PHPINFO() 中找到 Sqlsrv; - 来自连接的错误

我正在尝试连接到我在 Linux VM 上托管的 SQL Server 数据库。我在我的开发 Windows 机器上运行 xampp,连接来自我正在构建的 php 站点。我想我需要使用 sqlsrv 来连接。我从 https://learn.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view= 下载了 dll sql-server-ver15&viewFallbackFrom=sql-server-2019

我已将必要的 dll 文件移至我的 xamppphpetc 目录。我还验证了 php.ini 文件中的扩展目录是 extension_dir="C:xamppphpext"

以下内容已添加到 php.ini 的 Dynamic Extensions 部分:

extension=php_sqlsrv_81_ts_x86.dll
extension=php_pdo_sqlsrv_81_ts_x86.dll
extension=php8ts.dll

我在网上找到了有关删除 php_ 前缀、删除 .dll 后缀、使用 ts 或非 ts、将所有文件移动到扩展目录、仅将上面列出的几个文件移动到目录中的信息,不包括 php8ts。 dll 等。我已经尝试了上面的每一个配置,无论是逻辑的还是不逻辑的。

这是我的网站的示例连接代码:

$conn = new PDO('sqlsrv:Server=my_server_ip\MSSQLSERVER;Database=dbname', 'username', 'password');
if ($conn === false) {
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
} else {
    echo "success";
}

我尝试了多个不同的连接示例。通过上面的操作,我收到此错误:

致命错误:未捕获的 PDOException:在 C:xampphtdocssiteindex.php:123 中找不到驱动程序 堆栈跟踪:#0 C:xampphtdocssiteindex.php(123): PDO ->__construct('sqlsrv:Server=my_server_ip', 'username', 'password') #1 {main} 在第 123 行的 C:xampphtdocssiteindex.php 中抛出

从这里我逻辑上认为好吧,让我们通过回显来检查 phpinfo(); 。列表中的任何位置都没有列出 sqlsrv 或 PDO 变体的任何内容。即使在sqlsrv的页面上ctrl+f,也只能发现上面的错误。

我已验证已安装 ODBC 驱动程序。

我尝试过的其他事情是使用 sqlsrv_connect 而不是 PDO。我发现与我的 php 版本(8.1)有关的信息存在冲突,但我想无论如何还是要尝试一下。但是,当我遇到该变体时,我得到:

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

对我来说,很明显我的 .dll 没有被识别或类似的东西。然而我一生都无法理解为什么。我已经验证所有内容都以管理员身份运行,多次重新启动 xampp,删除/重新下载 dll 等。

谁能指出我可能没有想到的任何明显问题?

P粉201448898P粉201448898368 天前679

全部回复(1)我来回复

  • P粉798010441

    P粉7980104412023-11-10 19:58:28

    已解决。有两个问题。

    1. 我的 Xampp 安装已损坏。它无法识别我在页面上使用 echo phpinfo(); 时注意到的任何新 DLL。

    2. 出于某种原因,ini 文件配置尝试使用 x86 dll 而不是 x64,即使扩展在 ini 中编写为 x64 也是如此。

    解决步骤:

    1. 我再次使用默认设置重新安装并重新配置了 Xampp,现在可以识别 dll。

    2. 我从 Xampp 的扩展目录中删除了 x86 dll。

    最终的 php.ini 是这样的:

    extension=php_sqlsrv_81_ts_x64.dll
    extension=php_pdo_sqlsrv_81_ts_x64.dll
    extension=php8ts.dll
    extension=php_pdo_odbc.dll
    extension=php_pdo.dll

    使用最终的 .dll 可能是多余的,但它仍然可以按预期工作。确保验证 sqlsrv 或 pdo_sqlsrv 的正确版本,因为可能会出现与您的 php 版本的兼容性问题。

    回复
    0
  • 取消回复