【问题标题】:What is the exact equivalent of mysqli_fetch_array function in PDO?PDO 中 mysqli_fetch_array 函数的确切等价物是什么?
【发布时间】:2014-10-09 20:00:42
【问题描述】:

自从我更改为 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_array 的行为不同。

我尝试过的方法在 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。

我做错了什么?

【问题讨论】:

  • 3的问题是重复的吗?
  • 它不计数,它返回总行数,如果我有 50 行,它将在每行重复 50。
  • $count$counter不同的变量。
  • 我在这里复制代码时打错了。
  • 你仍然错过了一个实例。

标签: php mysql sql arrays pdo


【解决方案1】:

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

当我在这里复制代码时,这是一个错字。 – 用户 3109875

这个错字才是真正的问题。您看到 PDO 版本中的 3 被重复,因为在您的 mysqli 循环之后,您的 $counter 变量设置为 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'];
}

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

【讨论】:

  • 即使不重置为0,每次都会改变$counter++
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2015-06-13
  • 2023-03-22
  • 2020-02-13
  • 2019-12-07
  • 2023-01-17
  • 1970-01-01
相关资源
最近更新 更多