PHP/MSSQL:查询结果到表

Posted

技术标签:

【中文标题】PHP/MSSQL:查询结果到表【英文标题】:PHP/MSSQL: query result to table 【发布时间】:2019-02-10 17:15:37 【问题描述】:

我正在尝试将 MS SQL 查询的结果返回到表中。 但不知何故,我只得到一个带有标题的空白页面。 我不知道我做错了什么或在哪里寻找答案。 有人可以以正确的方式指导我。

感谢您的帮助

<?php
    $serverName = "192.168.8.8";
    $connectionOptions = array(
        "Database" => "GeoDynamics",
        "Uid" => "User",
        "PWD" => "Password"
    );
    //Establishes the connection
    $dbh = sqlsrv_connect($serverName, $connectionOptions);
$sql = "SELECT * FROM Aanbest WHERE ReceiptLimitDate = '2018-12-03'  order by ImportDatum desc"; 
$getResults= sqlsrv_query($dbh, $sql);
?>
<style type="text/css">
.tftable font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #729ea5;border-collapse: collapse;
.tftable th font-size:12px;background-color:#acc8cc;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;text-align:left;
.tftable tr background-color:#d4e3e5;
.tftable td font-size:12px;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;
.tftable tr:hover background-color:#ffffff;
</style>
<table class="tftable" border="1">
<thead>
    <tr>
    <th>ID</th>
    <th>Aanbestedingsdatum</th>
    <th>Klasse</th>
    <th>Omschrijving</th>
    <th>Postcode</th>
    <th>Stad</th>
    <th>Bestuur</th>
    <th>LikedBy?</th>
    <th>Like</th>
    </tr>
</thead>
<tbody>

<?php
    foreach ($dbh->query($sql) as $rows)
    ?>
    <tr>
        <td><?php echo $rows['ID']?></td>
        <td><?php echo $rows['ReceiptLimitDate']?></td>
        <td><?php echo $rows['Classes1']?></td>
        <td><?php echo $rows['Title']?></td>
        <td><?php echo $rows['AdministrationZip']?></td>
        <td><?php echo $rows['AdministrationCity']?></td>
        <td><?php echo $rows['AdministrationName']?></td>
        <td><?php echo $rows['LikedBy']?></td>
        <td><button type="button" id="like_btn">Like</button></td>
    </tr>
 <?php
  
 ?>
 </tbody>
</table>

【问题讨论】:

先查看查询结果。您还执行了两次。 $getResults 从未被使用过。 您确定连接已建立吗?你有没有得到任何错误? $getResults 是空的吗? 我应该改变什么? 【参考方案1】:

我认为$dbh-&gt;query($sql) 是您出错的原因。变量$dbh 保存来自sqlsrv_connect() 的结果,但您将其用作PDO class 变量。

像这样更改您的代码(包括错误检查):

<?php
    $serverName = "192.168.8.8";
    $connectionOptions = array(
        "Database" => "GeoDynamics",
        "Uid" => "User",
        "PWD" => "Password"
    );
    //Establishes the connection
    $dbh = sqlsrv_connect($serverName, $connectionOptions);
    if ($dbh === false) 
        echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
        exit;
    
    $sql = "SELECT * FROM Aanbest WHERE ReceiptLimitDate = '2018-12-03'  order by ImportDatum desc"; 
    $getResults = sqlsrv_query($dbh, $sql);
    if ($getResults === false) 
        echo "Error (sqlsrv_query): ".print_r(sqlsrv_errors(), true);
        exit;
    
?>
<style type="text/css">
.tftable font-size:12px;color:#333333;width:100%;border-width: 1px;border-color: #729ea5;border-collapse: collapse;
.tftable th font-size:12px;background-color:#acc8cc;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;text-align:left;
.tftable tr background-color:#d4e3e5;
.tftable td font-size:12px;border-width: 1px;padding: 8px;border-style: solid;border-color: #729ea5;
.tftable tr:hover background-color:#ffffff;
</style>
<table class="tftable" border="1">
<thead>
    <tr>
    <th>ID</th>
    <th>Aanbestedingsdatum</th>
    <th>Klasse</th>
    <th>Omschrijving</th>
    <th>Postcode</th>
    <th>Stad</th>
    <th>Bestuur</th>
    <th>LikedBy?</th>
    <th>Like</th>
    </tr>
</thead>
<tbody>
<?php
    while ($rows = sqlsrv_fetch_array($getResults, SQLSRV_FETCH_ASSOC)) 
?>
    <tr>
        <td><?php echo $rows['ID']?></td>
        <td><?php echo $rows['ReceiptLimitDate']?></td>
        <td><?php echo $rows['Classes1']?></td>
        <td><?php echo $rows['Title']?></td>
        <td><?php echo $rows['AdministrationZip']?></td>
        <td><?php echo $rows['AdministrationCity']?></td>
        <td><?php echo $rows['AdministrationName']?></td>
        <td><?php echo $rows['LikedBy']?></td>
        <td><button type="button" id="like_btn">Like</button></td>
    </tr>
<?php
  
?>
</tbody>
</table>

【讨论】:

【参考方案2】:

您可能会看到所谓的“死机白屏”。基本上您的脚本在执行代码时会遇到一些错误,但错误报告已关闭,因此它会静默失败。

尝试将此附加到脚本的开头,看看是否可以看到实际问题:

ini_set('display_errors', 'On');
ini_set('html_errors', 0);
error_reporting(E_ALL);

如果这不起作用,请查看更全面的答案 here,或咨询您的托管服务提供商以了解他们的 php.ini 设置。

【讨论】:

我在第 40 行遇到错误 --> 这一行:foreach ($dbh->query($sql) as $rows) 您需要将该行替换为 while($obj = sqlsrv_fetch_object($getResults)) 之类的内容。但这开始超出您原始问题的范围,请检查此线程***.com/q/23131514/10614791,我认为您应该能够弄清楚。如果您仍然遇到问题,请随时返回另一个问题,详细说明您收到的确切错误。

以上是关于PHP/MSSQL:查询结果到表的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery:将查询结果保存到表时找不到数据集

Google Bigquery API:如何将结果查询添加到表中?

将查询结果插入到表中

将查询保存到表中

如何将跨表查询的结果存储到表变量中

mysql查询-从表1中查询出来的结果重新插入到表1