我正在尝试连接到我在Linux上托管的一个Server。我在我的开发窗口机器上运行xampp,连接来自我正在构建的php站点。我想我需要用sqlsrv
来连接。我从https://learn.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的php.ini部分:
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";
}
我尝试过多个不同的连接例子。通过上面的一个,我收到了以下错误:
PDO->__construct('sqlsrv:Server=my_server_ip',致命错误: Uncaught :未能在C:\xampp\htdocs\site\index.php:123堆栈跟踪中找到驱动程序:#0 C:\xampp\htdocs\site\index.php( 123 ):在第123行C:\xampp\htdocs\site\index.php中抛出的C:\xampp\htdocs\site\index.php‘用户名’、‘密码’#1 {main}
从这里开始,我从逻辑上认为,好的,让我们通过回显它来检查phpinfo();
。列表中的任何位置都没有列出sqlsrv
或PDO变体。即使是sqlsrv页面上的ctrl+f,也只能找到上面的错误。
我已经证实我已经安装了ODBC驱动程序。
我尝试过的其他事情是使用sqlsrv_connect
而不是PDO。对于我的php版本(8.1),我发现这方面的信息相互矛盾,但是我们还是尝试一下吧。然而,当我遇到这个变体时,我得到:
致命错误:调用未定义函数sqlsrv_connect()
在我看来,我的.dlls显然没有被识别或者类似的东西。然而,我无法为我的生命明白为什么。我已经验证了一切都是以admin的形式运行,多次重新启动xampp,删除/重新下载dll等等。
有人能指出我可能没有想到的突出问题吗?
发布于 2022-05-13 22:46:57
解决了。有两个问题。
echo phpinfo();
时注意到的任何新DLL.编写的。
解决的步骤:
的扩展目录中删除了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的正确版本,因为可能会出现与phpversion的兼容性问题。
https://stackoverflow.com/questions/72227644
复制相似问题