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

时间:2014-08-16 05:50:05

标签: 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'];
}

如果我们有三行:结果;

1
TRIQUESHA

2
STACEY

3
DAQUEN

NOW 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行。

我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

$ count和$ counter是不同的变量。 - hjpotter92

     

当我在这里复制代码时,这是一个错字。 - 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'];
}

这将完全导致此答案所暗示的行为。现在,如果这是实际的代码,那么这是真正的原因,如果它与实际的不同,那么这个答案是无效的。