php - MySQLi 到 SQLSRV 的迁移 - MySQLi 的 fetch_assoc() 与 SQLSRV 的 fetch()
问题描述
对于我的罪过,我必须迁移(或者简单地说,重写)为仅与 MySQLi 一起工作而编写的支持功能。现在我正在尝试在 PDO 中做所有事情,但是对于一些代码,我认为可以通过重用旧脚本的一些部分并重新调整它们的用途来加快它的速度。
到目前为止,它的作用就像一个魅力——稍微改变功能,并对代码进行小到几乎微不足道的更改以使其正常工作。但在这里我被难住了。
我一直习惯于while($row = $result->fetch_assoc())
打印数据库中的所有行。我真的很想保持代码与旧代码的结构相似。下面是我尝试打印行的尝试,但在 SQLSRV 中它的工作方式不同。我可以通过使用类似 for 循环的方式轻松显示行(没有内容),for ($i=0; $i < $rowCount; $i++)
但这与我的代码相差太大。
在观察了我下面的示例解决方案之后,是否可以将上面的代码重新创建为 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"];
}
}
推荐阅读
- laravel - 获取自定义按钮内的当前 URL
- html - 如何从本地运行的html文件中由锚标记链接的文本中删除下划线
- python-3.x - Python 绘制日期*数量
- python - 在轮廓opencv上找到主色
- angular - 通过 Angular 6 Service Worker 中的新鲜度缓存资产
- h2 - 如何在浏览器中访问由 Micronaut 应用程序创建的 H2 数据库
- web-applications - 我在 websphere 中部署了我的 web 应用程序 .ear 文件,并尝试通过 web 浏览器访问应用程序 api。收到此错误
- android - 添加一个类似于本机应用程序的设置页面
- php - 从模态输入将图像存储在服务器中不起作用
- ios - AudioKit 多个 AKMIDISampler