XAMPP/SQLSRV: 无法在 PHPINFO() 中找到 Sqlsrv; - 来自连接的错误
XAMPP/SQLSRV: Unable to find Sqlsrv in PHPINFO(); - errors coming from connection
我正在尝试连接到我在 Linux 虚拟机上托管的 SQL 服务器数据库。我正在 运行ning xampp 我的开发 windows 机器上,连接来自我正在构建的 php 站点。我想我需要使用 sqlsrv
来连接。我从 https://docs.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver15&viewFallbackFrom=sql-server-2019
下载了 dll
我已将必要的 dll 文件移动到我的 xampp\php\etc\
目录中。我还验证了 php.ini 文件中的扩展目录是 extension_dir="C:\xampp\php\ext"
以下内容已添加到 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";
}
我尝试了多个不同的连接示例。使用上面的错误,我收到此错误:
Fatal error: Uncaught PDOException: could not find driver in C:\xampp\htdocs\site\index.php:123 Stack trace: #0 C:\xampp\htdocs\site\index.php(123): PDO->__construct('sqlsrv:Server=my_server_ip', 'username', 'password') #1 {main} thrown in C:\xampp\htdocs\site\index.php on line 123
从这里我逻辑上认为可以,让我们通过回显来检查 phpinfo();
。 sqlsrv
或列表中任何位置的 PDO 变体都没有列出任何内容。甚至在sqlsrv的页面上ctrl+f,发现也只有上面的错误
我已经确认我安装了 ODBC 驱动程序。
我尝试过的其他事情是使用 sqlsrv_connect
而不是 PDO。我发现关于我的 php 版本 (8.1) 的这项工作的信息相互矛盾,但我想还是让我们试试吧。但是,当我 运行 进入该变体时,我得到:
Fatal error: Call to undefined function sqlsrv_connect()
在我看来,我的 .dll 文件没有被识别或类似的事情是显而易见的。但是我终生无法理解为什么。我已经验证一切都是 运行 作为管理员,重新启动 xampp 多次,removed/redownloaded dll 等
任何人都可以指出我可能没有想到的任何明显问题吗?
已解决。有两个问题。
我的 Xampp 安装已损坏。它不会识别我在页面上使用 echo phpinfo();
时注意到的任何新 DLL。
ini 文件配置出于某种原因试图使用 x86 dll 而不是 x64,即使在 ini 中将扩展名写为 x64 也是如此。
解决步骤:
我再次使用默认设置重新安装和配置 Xampp,现在可以识别 dll。
我从 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 版本可能会出现兼容性问题。
我正在尝试连接到我在 Linux 虚拟机上托管的 SQL 服务器数据库。我正在 运行ning xampp 我的开发 windows 机器上,连接来自我正在构建的 php 站点。我想我需要使用 sqlsrv
来连接。我从 https://docs.microsoft.com/en-us/sql/connect/php/download-drivers-php-sql-server?view=sql-server-ver15&viewFallbackFrom=sql-server-2019
我已将必要的 dll 文件移动到我的 xampp\php\etc\
目录中。我还验证了 php.ini 文件中的扩展目录是 extension_dir="C:\xampp\php\ext"
以下内容已添加到 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";
}
我尝试了多个不同的连接示例。使用上面的错误,我收到此错误:
Fatal error: Uncaught PDOException: could not find driver in C:\xampp\htdocs\site\index.php:123 Stack trace: #0 C:\xampp\htdocs\site\index.php(123): PDO->__construct('sqlsrv:Server=my_server_ip', 'username', 'password') #1 {main} thrown in C:\xampp\htdocs\site\index.php on line 123
从这里我逻辑上认为可以,让我们通过回显来检查 phpinfo();
。 sqlsrv
或列表中任何位置的 PDO 变体都没有列出任何内容。甚至在sqlsrv的页面上ctrl+f,发现也只有上面的错误
我已经确认我安装了 ODBC 驱动程序。
我尝试过的其他事情是使用 sqlsrv_connect
而不是 PDO。我发现关于我的 php 版本 (8.1) 的这项工作的信息相互矛盾,但我想还是让我们试试吧。但是,当我 运行 进入该变体时,我得到:
Fatal error: Call to undefined function sqlsrv_connect()
在我看来,我的 .dll 文件没有被识别或类似的事情是显而易见的。但是我终生无法理解为什么。我已经验证一切都是 运行 作为管理员,重新启动 xampp 多次,removed/redownloaded dll 等
任何人都可以指出我可能没有想到的任何明显问题吗?
已解决。有两个问题。
我的 Xampp 安装已损坏。它不会识别我在页面上使用
echo phpinfo();
时注意到的任何新 DLL。ini 文件配置出于某种原因试图使用 x86 dll 而不是 x64,即使在 ini 中将扩展名写为 x64 也是如此。
解决步骤:
我再次使用默认设置重新安装和配置 Xampp,现在可以识别 dll。
我从 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 版本可能会出现兼容性问题。