php - PDO 中 mysqli_fetch_array 函数的确切等价物是什么?

标签 php mysql sql arrays pdo

自从我改用 PDO 以来,我似乎真的无法使用正确的函数来完成 mysqli_fetch_array() 正在做的事情,发生这种情况可能是因为我不太了解 mysqli_fetch_array 之间的真正差异和 PDO 的 fecth()。

从某些来源,while($row = mysqli_fetch_array($query) “每次调用时从结果集中获取一行。”,而 $row = $query->fetch() 返回整个结果集一个电话。

我问过两个类似的问题,其中一个有赏金,但我似乎无法找到正确的方法来解决我想做的事情。

, From this question ,

  • mysql_fetch_array = fetch(PDO::FETCH_BOTH) - 行是具有数字和命名索引的数组。
  • mysql_fetch_assoc = fetch(PDO::FETCH_ASSOC) - 行是具有命名索引的数组。
  • mysql_fetch_row = fetch(PDO::FETCH_NUM) - 行是带有数字索引的数组。
  • mysql_fetch_object = fetch(PDO::FETCH_OBJ) 或 fetch(PDO::FETCH_CLASS) 取决于您是否为 mysql_fetch_object 指定了可选的 className 参数。行是对象,可以是指定类或 stdClass。
  • while 循环等同于:

$data = $query->fetchAll(PDO::FETCH_BOTH),

使用此列表中的第一个似乎与 mysqli_fetch_arrray 的行为有所不同。

我试过的方法在 while 循环中返回了很多错误,有时会破坏浏览器,感谢 Chrome,我不会发布它。

这是我想做的

$counter = 0;    
while($row = mysqli_fetch_array($query)){
   $counter++;
    echo $counter;
    echo $row['Name'];
}

如果我们有三行:RESULT;

1
TRIQUESHA

2
STACEY

3
DAQUEN

现在是 PDO

$count = 0;
while($row = $query->fetch(PDO::FETCH_BOTH)){
$counter++;
    echo $counter;
    echo $row['Name'];
}

同样,如果我们有三行:PDO RESULT

3
TRIQUESHA

3
STACEY

3
DAQUEN

它不计算,它返回的是总行数,如果我有 50 行,它会在每行上重复 50 行。

我做错了什么?

最佳答案

$count and $counter are different variables. – hjpotter92

That's a typo when i was reproducing the code here. – user3109875

这个错字才是真正的问题所在。您看到 PDO 版本中的 3 被重复导致其 $counter 变量在 mysqli 循环后设置为 3,并且它永远不会更新。在 PDO 循环之前需要正确重置它才能看到。

//$count = 0;   // Wrong
$counter=0;    //  Correct. 
while($row = $query->fetch(PDO::FETCH_BOTH)){
    $counter++; 
    echo $counter;
    echo $row['Name'];
}

编辑:

虽然 Mark M 正确地指出了我忽略的内容,但我仍然认为这是导致此错误的原因。在该问题的编辑历史中查看此修订

$count = 0;
while($row = $query->fetch(PDO::FETCH_BOTH)){
$count++;
    echo $counter;    //This will always remain 3 because you are incrementing $count
    echo $row['Name'];
}

这将准确地导致此答案所暗示的行为。现在,如果这是实际代码,那么这就是实际原因,如果这与实际情况不同,则此答案无效。

关于php - PDO 中 mysqli_fetch_array 函数的确切等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25337340/

相关文章:

javascript - 离线使用谷歌地球(或 map )

php - 如何在Cakephp3复合主键中插入空记录?

mysql - 如何加快多重内连接查询的速度?

mysql查询按字母顺序对同一列表中计数> 1和计数= 1的项目进行排序

mysql - 两个 "unknown"列总和的 SQL 查询计数

php - mysql从5.5升级到5.7,MyISAM到InnoDB,LEFT JOIN和NULL问题

php - 生成数千个独特的不可预测的序列号

php - 如何在不使用谷歌应用程序的情况下授权谷歌云端硬盘服务帐户访问谷歌帐户?

python - Django:如何为 MySQL VARBINARY HEX 字段建模?

mysql - SQL表解决方案,计算同一个表中的不同列