设置 sqlsrv_connect() 函数才能正常工作?

Set up sqlsrv_connect() function to work correctly?

提问人:doge guide 提问时间:9/13/2023 最后编辑:doge guide 更新时间:9/15/2023 访问量:64

问:

只是要切换到PDO,以此为参考

我在基于 Debian 12 的 q4os 5.2 上运行 Microsoft SQL Server 2022,我正在尝试使用此代码连接到它

function OpenConnection() {
    $serverName = "localhost, 1433";
    $connectionInfo = array( "Database"=>"db", "UID"=>"acc", "PWD"=>"87654321Abc");
    $conn = sqlsrv_connect( $serverName, $connectionInfo);
    if ($conn) {
        echo "Connection established.<br />";
    } else {
        echo "Connection could not be established.<br />";
        die( print_r( sqlsrv_errors(), true));
    }
}
OpenConnection();

该页面在本地(不是 Docker)运行,SQL Server 由 localhost (127.0.0.1) 提供,并且我安装并启用了 SQL Server 驱动程序以及 Apache PHP 扩展。

当我在 Apache 上打开它时,我收到 HTTP 500 错误,但是当我不声明该函数时,它很好。

找不到如何设置它,这是我在网上找到的许多不同方式。

我尝试将主机名设为 localhost 而不是 q4os-desktop;终端中的主机名,我在网上找到的不同解决方案,以及来自php和microsoft的示例,当然没有成功。

php sql-server linux apache debian

评论

0赞 Dale K 9/13/2023
“没有成功 OFC” - 什么是 OFC?
2赞 user3783243 9/13/2023
HTTP 500 error是常规服务器错误状态代码。日志显示实际错误是什么?你需要吗,我会在这一点上使用 PDO。它支持 mssql 以及其他 DBS,因此如果您为此学习它,那么您将学习所有(MySQL、PostGres 等)。sqlsrv_*
0赞 AlwaysLearning 9/13/2023
您是否尝试过在端口号前不带空格?但是,如果它在默认端口上运行,那么您根本不需要指定端口号,因此应该可以工作。$serverName = "localhost,1433";$serverName = "localhost";
0赞 AlwaysLearning 9/13/2023
解决什么?如果它解析为 IPv6 地址,并且 SQL Server 仅侦听 IPv4 地址,则它不会连接。localhost::1127.0.0.1
0赞 AlwaysLearning 9/13/2023
在 Docker 容器之外,SQL Server for Linux 实际上只支持某些版本的 RHEL、SUSE 和 Ubuntu,因此尝试在 Debian 12 上使用它可能会“很有趣”。您是否监视错误日志文件(通常位于 ),以确认服务是否实际正确启动并侦听连接?/var/opt/mssql/log/errorlog

答:

-1赞 Kukuh Gumilang 9/13/2023 #1

试试这个:

$connection = sqlsrv_connect('YOUR_IP\MSSQL_INSTANCE_NAME',
    array(
        'UID' => 'USERNAME_MSSQL',
        'PWD' => 'PASSWORD_MSSQL',
        'Database' => 'DATABASE_NAME',
        'CharacterSet' => 'UTF-8',
    )
);

评论

1赞 AlwaysLearning 9/13/2023
它是适用于 Linux 的 SQL Server,因此没有可用于解析实例名称的 SQL Browser 服务。
1赞 Dale K 9/13/2023
请使用编辑器中的代码格式选项,而不是转义大量字符。
1赞 user3783243 9/13/2023
请参阅 meta.stackoverflow.com/questions/251361/...以获取未来的答案/问题。