如何使用 PHP 显示 SQL Server 表数据?

Posted

技术标签:

【中文标题】如何使用 PHP 显示 SQL Server 表数据?【英文标题】:How do I display SQL Server table data using PHP? 【发布时间】:2021-12-07 17:37:56 【问题描述】:

我想开始显示我使用 php 使用的 sql server 数据库中的一些数据。我相信我与数据库的连接正常,但我无法从 Facility 表中获取任何数据以显示在浏览器中。我一直在通过 XAMPP 使用 Apache 服务器来运行 PHP(PHP 8.0 版)。 SQL 服务器(2012 版)位于大楼中的另一台机器上。到目前为止,我有:

    已下载名为“php_sqlsrv_80ts.dll”和“php_sqlsrv_80_ts.dll”的 sqlsrv 扩展文件。两者都在我的 XAMPP php.ini 文件中作为新扩展名(见下文) 添加两个新扩展后重新启动我的 Apache 和 mysql 服务器。 测试了我的连接并尝试使用以下代码显示一些结果:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MSSQL Connection Test</title>
</head>
<body>
    <?php
        $serverName = "###"; //serverName\instanceName
        $connectionInfo = array( "Database"=>"UTRBDMSNET", "UID"=>"###", "PWD"=>"###");
        $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));
        

        $query = "SELECT * FROM Facility;";
        $result = sqlsrv_query($conn, $query);
        $resultCheck = sqlsrv_num_rows($result);

        if ($resultCheck > 0) 
            while ($row = sqlsrv_fetch_assoc($result)) 
                echo $row['Operator'] . "<br>";
            
        
    ?>
</body>
</html>

当我在浏览器中访问该文件时,我收到此消息“已建立连接”。我在控制台中看不到任何东西。如果没有任何错误消息,很难判断出了什么问题。理想情况下,我想从我的数据库中的任何表中显示一些东西,看看是否一切正常。

【问题讨论】:

使用sqlsrv_errors() 检查sqlsrv_query() 上的错误。见php.net/manual/de/… 我认为sqlsrv_fetch_assoc 不存在。应该是sqlsrv_fetch_array。示例见:php.net/manual/de/… @cottton 我认为sqlsrv_fetch_assoc 存在,但我使用不正确。 @Hiebs915 一个类似的问题和一个answer。 【参考方案1】:

查看@cottton 发布的两个链接后,我能够从数据库中查询一些数据。我发现我的代码有几个问题:

    当我在我的 SQL 查询中使用 * 时,它似乎不喜欢。如果我指定要查看的列并告诉它回显表中的第一行,例如SELECT Operator FROM Facility,它可以正常工作。当我说 SELECT * FROM Facility 并在 echo 语句中指定列时,它给了我这个错误:

“警告:第 58 行 C:\Users###\Documents\GitHub_Repos\Utah_OG_Website\MSSQLQueryTest.php 中未定义的数组键“Operator””。

    我需要在 while 语句中使用 sqlsrv_fetch_arraySQLSRV_FETCH_NUMERIC。注意 - 它只接受大写的 SQLSRV_FETCH_NUMERICsqlsrv_fetch_numeric。 如果我使用if ($resultCheck &gt; 0) ,它不会显示任何结果。我假设这与返回的数据类型有关,目前还不能完全确定。

这是用于比较的工作代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>MSSQL Connection Test</title>
</head>
<body>
    <?php
        $serverName = "###"; //serverName\instanceName
        $connectionInfo = array( "Database"=>"###", "UID"=>"###", "PWD"=>"###");
        $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));
        

        $query = "SELECT Operator FROM Facility;";
        $result = sqlsrv_query($conn, $query);
        $resultCheck = sqlsrv_num_rows($result);

        while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_NUMERIC)) 
            echo $row[0] . "<br>";
        
    ?>
</body>
</html>

【讨论】:

以上是关于如何使用 PHP 显示 SQL Server 表数据?的主要内容,如果未能解决你的问题,请参考以下文章

Win 10 + IIS + PHP v7.1.7 + SQL Server 2008 R2如何让SQL Server连接正常工作?

在sql server 数据库字段中如何加入回车符和换行符?

使用 html 和 php 从 xampp sql server 获取数据

sql 计算当前MySQL数据库中的表数

SQL (Oracle):按特定列分组

如何将 PHP 连接到 SQL Server?