MySQLi到SQLSRV迁移 - MySQLi的fetch_assoc()vs SQLSRV的fetch()[重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

对于我的罪过,我必须迁移(或简单地说,重写)支持的功能,这些功能只能与MySQLi一起使用。现在我正在尝试在PDO中做所有事情但是对于一些代码我认为可以通过重用旧脚本的位并重新使用它们来加速它。

到目前为止,它的工作方式就像一个魅力 - 稍微改变功能,并对代码进行小到几乎无关紧要的更改以使其正常工作。但在这里我感到难过。

我一直使用while($row = $result->fetch_assoc())来打印数据库中的所有行。我确实希望保持代码类似于旧代码的结构。 Down bellow是我尝试打印行但是在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"]; 
                      }
                  }
php mysql mysqli pdo sqlsrv
1个回答
1
投票

摆脱$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"]; 
    }
}            
© www.soinside.com 2019 - 2024. All rights reserved.