【发布时间】:2019-08-25 21:29:35
【问题描述】:
对于我的罪过,我必须迁移(或者简单地说,重写)为仅与 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"];
}
}
【问题讨论】:
-
for应该是while。 -
我需要该条件,因为如果行等于或小于 0,我的脚本会执行其他操作。尽管删除该位的作用很小。网页只是不打印表格并提示错误。
-
@Barmar 实际上是
while而不是for。我没有注意到它,因为我正在编写一个没有复杂脚本的示例脚本。
标签: php mysql mysqli pdo sqlsrv