我正尝试将mysql SELECT查询保存到文件中,如下所示:
$result = mysqli_query($db,$sql);
$out = fopen('tmp/csv.csv', 'w');
while ($row = $result -> fetch_row()) {
fputcsv($out,$row);
}
fclose($out);
保存后,我需要在页面上发布如下内容:
while ($row = mysqli_fetch_assoc($result)) {
//embed html code
}
问题在于,每当我运行$ result-> fetch_row()时,数据记录都会丢失。我需要能够在代码中至少运行两次fetch_object并保存数据。我认为克隆将是一个很好的解决方案,但事实并非如此。
除了在sql数据库上执行2次查询外,是否还有其他提示?
答案 0 :(得分:1)
我相信另一个可行的解决方案是使用mysqli_data_seek
。
mysqli_result对象是一个指针,每次调用fetch_row()时都会在数据中移动,但是您可以通过调用将指针移回到开头
mysqli_data_seek($result, 0);
现在,结果照原样被“重置”了,您可以再次使用它。
在此处了解更多信息:
答案 1 :(得分:0)
如果需要重复使用数据,请将其加载到数组中-或在同一循环中执行所有逻辑。
例如,
$data = []:
$result = $mysqli->query("...");
while ($row = mysqli_fetch_assoc($result)) {
$data[] = $row;
}
$out = fopen('tmp/csv.csv', 'w');
foreach ($data as $row) {
fputcsv($out, $row);
}
fclose($out);
// ...
foreach ($data as $row) {
//embed html code
}
或者在同一循环中完成所有操作(这可能并不总是可能的,因此,如果不能,请使用上面的选项)。
$result = mysqli_query($db, $sql);
$out = fopen('tmp/csv.csv', 'w');
while ($row = $result->fetch_row()) {
fputcsv($out,$row);
// embed HTML
}
fclose($out);
答案 2 :(得分:0)
如果您已将mysqlind
作为PHP MySQL基础结构的一部分安装,请使用fetch_all()
将所有结果放入一个数组中。然后,您可以根据需要多次使用该数组。
$result = mysqli_query($db,$sql);
$all_results = $result->fetch_all();
$out = fopen('tmp/csv.csv', 'w');
foreach ( $all_results as $row){
fputcsv($out,$row);
}
fclose($out);
// now to reuse the array for your HTML output
foreach ($all_results as $row) {
//embed html code
}
然后您可以重复使用$all_results
如果您没有mysqlind
,请编写一个简单的循环以使用结果集中的所有结果手动加载数组
$result = mysqli_query($db,$sql);
$all_results = [];
while ($row = $result -> fetch_assoc()) {
$all_results[] = $row;
}
$out = fopen('tmp/csv.csv', 'w');
foreach ( $all_results as $row){
fputcsv($out,$row);
}
fclose($out);
// now to reuse the array for your HTML output
foreach ($all_results as $row) {
//embed html code
}