This question already has answers here:
How to use PDO to fetch results array in PHP?
                                
                                    (3个答案)
                                
                        
                                在10个月前关闭。
            
                    
出于我的罪过,我必须迁移(或简单地说,是重写)编写用于MySQLi的支持功能。现在,我试图在PDO中进行所有操作,但是对于某些代码,我认为可以通过重新使用旧脚本的某些位并重新使用它们来加快处理速度。

到目前为止,它的工作原理很吸引人-稍微更改功能,对代码进行很小甚至几乎没有意义的更改,即可使其正常工作。但是在这里我很沮丧。

我一直使用while($row = $result->fetch_assoc())打印数据库中所有的行。我确实确实想使代码与旧代码的结构相似。下面是我尝试打印行的尝试,但是在SQLSRV中,它的工作方式不同。通过使用像for ($i=0; $i < $rowCount; $i++)这样的for循环,我可以轻松地显示行(不包含任何内容),但这与我的代码有很大不同。

观察下面的示例解决方案后,是否可以将上面的代码重新创建为SQLSRV解决方案并保持相同的结构?



我正在使用的MySQLi解决方案:

                  $sql = "SELECT * FROM tasks ORDER BY PRIORITY DESC;";
                  $result = $conn->query($sql);// $conn is `$conn = new mysqli($servername, $username, $password, $db);`
                  if ($result->num_rows > 0)
                  {
                     while($row = $result->fetch_assoc())
                     {
                        echo "<br> FROM :".$row["FROM"];
                        echo "<br> DEPT :".$row["DEPT"];
                        echo "<br> TASK_NAME :".$row["TASK_NAME"];
                        echo "<br> PRIORITY :".$row["PRIORITY"];
                     }
                  }


这是我使用MS SQLSRV解决问题的尝试:

                $stmt = $GLOBALS['conn']->prepare("SELECT * FROM tasks;");
                $stmt->execute();
                $stmt->fetchAll();
                //
                $rowCount = $stmt->rowCount();

                //echo "<br> Row Count: ". $rowCount;

                  while ($rowCount > 0)
                  {
                      for ($row = $stmt->fetch())// For evident reasons that doesn't not work
                      {
                            echo "<br> FROM :".$row["FROM"];
                            echo "<br> DEPT :".$row["DEPT"];
                            echo "<br> TASK_NAME :".$row["TASK_NAME"];
                            echo "<br> PRIORITY :".$row["PRIORITY"];
                      }
                  }

最佳答案

摆脱$stmt->fetchAll();。这将获取所有行,因此没有多余的内容可以处理循环。并且循环应使用while,而不是for

或将fetchAll()的结果分配给变量,然后对其进行循环。

$rows = $stmt->fetchAll();
if (count($rows) > 0) {
    foreach ($rows as $row) {
        echo "<br> FROM :".$row["FROM"];
        echo "<br> DEPT :".$row["DEPT"];
        echo "<br> TASK_NAME :".$row["TASK_NAME"];
        echo "<br> PRIORITY :".$row["PRIORITY"];
    }
}

关于php - 从MySQLi到SQLSRV的迁移-MySQLi的fetch_assoc()与SQLSRV的fetch()的关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55510621/

10-13 01:23