Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP将数据库结果导出到CSV_Php_Mysql_Database_Excel_Export - Fatal编程技术网

使用PHP将数据库结果导出到CSV

使用PHP将数据库结果导出到CSV,php,mysql,database,excel,export,Php,Mysql,Database,Excel,Export,我浏览了这个网站,发现了很多关于这件事的帖子,但是没有一个能真正帮助像我这样的新手,因为我不能正确理解答案 我已从数据库中选择数据并显示在网页的表格中。我现在需要在这个表下面有一个链接,可以将这些数据导出到CSV文件中 我在这个网站上找到的答案之一是: 然而,这个答案对我来说没有意义,我也不知道该如何处理代码 以下是该答案的代码: header("Content-type: text/csv"); header("Content-Disposition: attachment; filename

我浏览了这个网站,发现了很多关于这件事的帖子,但是没有一个能真正帮助像我这样的新手,因为我不能正确理解答案

我已从数据库中选择数据并显示在网页的表格中。我现在需要在这个表下面有一个链接,可以将这些数据导出到CSV文件中

我在这个网站上找到的答案之一是:

然而,这个答案对我来说没有意义,我也不知道该如何处理代码

以下是该答案的代码:

header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");

$array = array(
    array("data11", "data12", "data13"),
    array("data21", "data22", "data23"),
    array("data31", "data32", "data23"));
outputCSV($array);

function outputCSV($data) {
    $outstream = fopen("php://output", "w");
    function __outputCSV(&$vals, $key, $filehandler) {
        fputcsv($filehandler, $vals); // add parameters if you want
    }
    array_walk($data, "__outputCSV", $outstream);
    fclose($outstream);
}
我有很多问题,比如我需要先创建一个excel文件吗?如果是,是否需要为空

这是什么

$array = array(
    array("data11", "data12", "data13"),
    array("data21", "data22", "data23"),
    array("data31", "data32", "data23"));
这应该是我的数据吗?我如何改变它以适应我的数据

为什么在定义函数之前调用函数

函数($VAL、$key、$filehandler)中的这些变量是什么?它们是在哪里创建的

我该如何使用这个代码,因为很多人似乎认为它是完美的

我真的需要帮助从开始到结束这一点,因为我是一个完整的PHP新手

我研究了下面的一个答案,现在我有了这个代码

$i=0;
                        $csv="";
                        for ($a=0; $a<=$count; $a++) {
                            $i++;
                            $csv.=preg_replace("/\n/",'',preg_replace("/,/",';',$serveys[$a]['FeedbackName'])).",".
                                  preg_replace("/\n/",'',preg_replace("/,/",';',$serveys[$a]['BranchName']));
                            $csv.="\n";
                        }

                        if ($i>0) {
                            header("Pragma: public");
                            header("Expires: 0");
                            header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
                            header("Cache-Control: private",false);
                            header("Content-Type: application/octet-stream");
                            header("Content-Disposition: attachment; filename=\"table.csv\";" );
                            header("Content-Transfer-Encoding: binary");

                            echo $csv;
                        } else {
                            return "Nothing to download!";
                        }
$i=0;
$csv=”“;
对于($a=0;$a0){
标题(“Pragma:public”);
标题(“到期日:0”);
标头(“缓存控制:必须重新验证,后检查=0,前检查=0”);
标头(“缓存控制:专用”,false);
标题(“内容类型:应用程序/八位字节流”);
标题(“内容配置:附件;文件名=\”table.csv\“;”);
标题(“内容传输编码:二进制”);
echo$csv;
}否则{
返回“无需下载!”;
}

当我运行页面时,虽然没有任何更改,但数据仍按原样显示在页面上。但是没有创建csv文件,也没有发生错误。

代码创建了一个新的文件对象,该对象输出到标准输出,然后作为下载提供给用户,因为之前发送了标题

这是你的数据;关联数组的数组。如何填充它取决于您

对函数的调用在定义之前,因为PHP首先在顶层完全解析文件,所以函数实际上将在调用时定义。这不适用于if语句中的函数

该函数的值由标准函数fputcsv提供


您使用的代码与前面介绍的几乎完全相同。

第三行-查询您的数据库(这取决于您如何连接到数据库,我使用的是类)
第四行-获取数据(这取决于如何连接到数据库)

但您可以使用连接,只获取数据,执行此操作时,不要显示数据库中的数据,将其添加到变量
$csv.='some string'
。获取所有数据时,显示
标题
s(它将创建csv文件),然后显示所有数据

,“
-新单元格
“\n”
-新行
这就是为什么我使用了
preg_replace
,因为如果数据库中的单元格是
,这个逗号会创建新的单元格,而您不需要它,所以可以用
替换它

您不必创建csv文件,您的文件名在这行
标题中(“内容处置:附件;文件名=\”table.csv\“;”-
table.csv

$i=0;
$csv="";
$res=$db->query('SELECT * FROM `table_name`');
while ($row=$res->fetch()) {
    $i++;
    $csv.=preg_replace("/\n/",'',preg_replace("/,/",';',$row['col1'])).",".
                preg_replace("/\n/",'',preg_replace("/,/",';',$row['col2'])).",".
                preg_replace("/\n/",'',preg_replace("/,/",';',$row['col3'])).",".
                preg_replace("/\n/",'',preg_replace("/,/",';',$row['col4'])).",".
                preg_replace("/\n/",'',preg_replace("/,/",';',$row['col5']));
    $csv.="\n";
}

if ($i>0) {
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: application/octet-stream");
    header("Content-Disposition: attachment; filename=\"table.csv\";" );
    header("Content-Transfer-Encoding: binary");

    echo $csv;
} else {
    return "Nothing to download!";
}

高亮显示的部分是一个二维值数组,非常类似于电子表格(本例中为CSV文件)。最外层的数组将可以想象为行的数组放在一起。该数组中的每个值都写入一列。因此:

$array = array(
  array("data11", "data12", "data13"),
  array("data21", "data22", "data23"),
  array("data31", "data32", "data23"));
,您将得到如下表格:

----------------------------
| data11 | data12 | data13 |
----------------------------
| data21 | data22 | data23 |
----------------------------
| data31 | data32 | data33 |
----------------------------
如何更改此数据取决于如何从您提到的数据库中获取数据,但基本原则是相同的:将所有数据放入一个
数组
,每行有一个
数组
,并将该行中的值放入行数组中

变量是传递给回调函数的参数,您将回调函数赋予该函数
array\u walk
获取一个数组,迭代其中的每个项目,并对该项目应用函数,在这种情况下,它遍历行数组,并将每个行数组作为CSV写入打开的文件。因此,
$vals
将始终包含行数组,
$key
在此被忽略,但它将包含所访问的数组项的索引或键,
$filehandler
是传入的
$outstream
变量,它是用于将值写入文件的打开文件处理程序


最后,在PHP中,只要函数在同一范围内,就可以在使用函数之后定义函数。

使用
header
函数向用户代理发送有关响应的传统信息。这些附加信息被传递为。看

标题(“内容类型:text/csv”):此代码将告诉用户代理或浏览器,它将接收的内容是CSV文件。看

标题(“内容配置:附件;文件名=file.csv”):此代码告诉用户代理或浏览器将此内容作为附件接收,并且此附件的名称为
file.csv
。根据浏览器设置,浏览器可能会将此内容保存在下载文件夹中,或要求用户提供本地文件以保存该文件。看

标题(“Pragma:无缓存”):相应地,此指令与具有相同含义的
缓存控制:无缓存
。Pragma:no cache
指令用于与HTTP/1.0的向后兼容性。看

标题(“过期:0”)此代码阻止的用户代理
$array = array(
        array("data11", "data12", "data13"),
        array("data21", "data22", "data23"),
        array("data31", "data32", "data23"));
"data11","data12","data13"
"data21", "data22", "data23"
"data31", "data32", "data23"