【问题标题】:PHP sqlsrv_fetch_array with "while loop" crosses the first row带有“while循环”的PHP sqlsrv_fetch_array穿过第一行
【发布时间】:2023-03-21 03:18:01
【问题描述】:

我从 MScost 表中获取数据以输入到 tmp_table。 我使用带有 sqlsrv_fetch_array 的 while 循环插入到 tmp_table 表中。 getData 和 addData 是我创建的函数,用于从我的数据库中获取数据并将数据添加到我的数据库中。

$resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");

if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
    while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
        $category = $row['category'];
        $ttl = $row['ttl'];
        addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
    }
    echo $category."=".$ttl."</br>";
}else {
    addData($conn, "tmp_table(category,ttl1)", "'NON',0");
    echo "Null";
}

它没有任何错误。 但是 while 循环穿过存在的第一行。 不是秀它没有插入到数据库中。

然后我尝试在 IF 外部复制 while 循环粘贴,它没有越过第一行。可以正常使用。

这是为什么?我希望它在不跨越第一行的情况下在 IF 中工作。我该怎么办?

【问题讨论】:

    标签: php sql-server loops while-loop sqlsrv


    【解决方案1】:

    我们来看看这段代码:

    if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null){
        while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
    

    if 语句中你已经调用了sqlsrv_fetch_array,这意味着第一行已经被提取。在您的 while 循环中,您会执行更多 sqlsrv_fetch_array 调用,这些调用会返回下一行(在第一行之后)。

    if 语句本身(尽管必须删除)也不正确,您必须使用方括号来组成有效的语句,使用!== 进行比较并始终将null 写成小写:

    if (($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) !== null) {
    

    【讨论】:

      【解决方案2】:

      您的问题是您使用if($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC) != Null) 检查从结果集中读取了第一行。删除此检查,您将能够获取所有数据。

      您可以尝试以下脚本:

      <?php
      $resm1 = getData($conn, "years,months,category,ROUND(mfg,0)as ttl", "MScost", "years='2018' and months='NOV'");
      
      $rc = 0;
      while ($row = sqlsrv_fetch_array($resm1, SQLSRV_FETCH_ASSOC)) {
         $rc++;
         $category = $row['category'];
         $ttl = $row['ttl'];
         addData($conn, "tmp_table(category,ttl1)", "'$category','$ttl'");
         echo $category."=".$ttl."</br>";
      }
      if ($rc == 0) {
         addData($conn, "tmp_table(category,ttl1)", "'NON',0");
         echo "Null";
      }
      ?>
      

      PHP Driver for SQL Server 支持sqlsrv_num_rows() 函数,该函数返回结果集中的行数。但只有当您对 sqlsrv_query() 的调用使用客户端、静态或键集游标(默认为正向游标)时,您才必须使用此函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-09
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 2012-08-30
        • 2013-02-25
        • 2014-11-03
        相关资源
        最近更新 更多