gpt4 book ai didi

php - MySQLi fetch_all 连续调用出错

转载 作者:行者123 更新时间:2023-11-29 18:02:29 25 4
gpt4 key购买 nike

我已经设置了一个类来处理我的 MySQLi 调用。调用正常工作,因此没有问题。

我最近将结果处理从类的查询方法中删除为两个单独的 setter 方法。现在,两次连续的 fetch_all 调用会导致错误。

之前的(工作)代码通过一次 fetch_all 调用将结果加载到两个数组 res_rowsres_cols 中:

// Convert results into two sets of values
// and store in properties
// $res_rows=results by row (column names in element 0)
// Each row is an indexed array
// $res_cols=results by column (associative arrays)
// Key is the column name; Value is an array

$results=$res->fetch_all(MYSQLI_ASSOC);

// $colNames is an array of the column names
$colNames=array_keys($results[0]);

// Rows
foreach($results as $r) {
$this->res_rows[]=array_values($r);
}
array_unshift($this->res_rows,$colNames);

// Columns

$vals=array();

// Count the number columns in the query
$numCols=count($colNames);

// Iterate through the columns
for($i=0;$i<$numCols;$i++) {

$col=$colNames[i];
$storage=array();

foreach($results as $r) {
$storage[]=$r[$colNames[$i]];
}

$vals[]=$storage;
}

$this->res_cols=array_combine($colNames,$vals);

我已将此代码移至两个方法 setRes_rowssetRes_cols 中,并按顺序调用它们(请参阅代码)。每个方法都使用 fetch all 从结果对象中提取结果。

$this->setRes_rows($res);
$this->setRes_cols($res);

发生的情况是,第一个调用的行为符合预期,第二个调用返回一个空数组。

如果我反转调用(例如首先 setRes_cols),也会发生同样的事情(第一个调用按预期工作;第二个调用为空)。所以我知道代码很好。我什至更改了其中一种方法中的所有变量名称,但没有效果。

我在调用之间转储了结果对象上的所有属性和方法,它看起来没有变化。但由于某种原因,第二个 fetch_all 不起作用。

简单的解决方法是使用单个 fetch_all 然后调用我的方法。但我有兴趣知道我是否遗漏了任何奇怪的东西。

谢谢大家。

最佳答案

看起来您需要在 fetch_all 之后重置结果指针。
我在文档中没有找到专门针对 fetch_all 的任何内容 - 仅涉及在 fetch_assoc() 之后重置,我们可以在其中找到对 data_seek()< 的引用:http://php.net/manual/en/mysqli-result.data-seek.php

所以你应该这样做:

在第二个fetch_all()之前执行

$res->data_seek(0);  // where $res is your mysqli result Object

这基本上将结果指针设置为第一条记录。

关于php - MySQLi fetch_all 连续调用出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48217226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com