Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.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
将MySQL数据库作为Excel CSV导出到PHP中的桌面_Php_Mysql_Excel_Csv_Mysqli - Fatal编程技术网

将MySQL数据库作为Excel CSV导出到PHP中的桌面

将MySQL数据库作为Excel CSV导出到PHP中的桌面,php,mysql,excel,csv,mysqli,Php,Mysql,Excel,Csv,Mysqli,我一直在寻找为我的数据库网站启用导出功能的方法。我的目标是构造一个非常简单的PHP代码来实现这一点,它所需要的只是将我的一个MySQL表的内容导出到用户的桌面,或者给用户一个可点击的链接,以便用户可以下载导出的数据库。数据库必须是Excel/CSV格式(因为我也将使用此功能导入/导出数据库备份功能) 我看到了fputcsv()和其他旧方法,如mysql(而不是mysqli)代码,但都失败了,一些方法在服务器目录上创建了一个CSV文件,而其他简单方法给出了如下错误 explode()要求参数2是字

我一直在寻找为我的数据库网站启用导出功能的方法。我的目标是构造一个非常简单的PHP代码来实现这一点,它所需要的只是将我的一个MySQL表的内容导出到用户的桌面,或者给用户一个可点击的链接,以便用户可以下载导出的数据库。数据库必须是Excel/CSV格式(因为我也将使用此功能导入/导出数据库备份功能)

我看到了fputcsv()和其他旧方法,如mysql(而不是mysqli)代码,但都失败了,一些方法在服务器目录上创建了一个CSV文件,而其他简单方法给出了如下错误

explode()要求参数2是字符串,对象在

fputcsv()要求参数2为数组,在

我觉得这应该很简单,但什么是用于导出DB特性的最佳方式或代码

编辑:


在组合和测试了一系列选项之后,我能够解决它。我在这里分享,这样那些将经历我困境的人就不会像我一样经历困难:(

当用户单击“导出”按钮时,Chrome browser会自动下载一个CSV文件,其中包含数据库副本,包括字段名

<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 
<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 


SQL Server备份和恢复
.btn{
宽度:80px;
高度:30px;
背景#0B49D8;
颜色:#FFFFFF;
}
**php代码如下。您可以更改扩展名.sql或.csv,并更改要保存备份文件的路径。当前备份保存在代码文件所在位置附近的文件中。dabase备份文件名是您可以更改的库存文件**

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

error_reporting(error_reporting() & ~E_NOTICE);
backup_tables('localhost','root','','stock1');

/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{

    $link = mysql_connect($host,$user,$pass);
    mysql_select_db($name,$link);

    //get all of the tables
    if($tables == '*')
    {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while($row = mysql_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }

    //cycle through
    foreach($tables as $table)
    {
        $result = mysql_query('SELECT * FROM '.$table);
        $num_fields = mysql_num_fields($result);

        $return.= 'DROP TABLE '.$table.';';
        $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        $return.= "\n\n".$row2[1].";\n\n";

        for ($i = 0; $i < $num_fields; $i++) 
        {
            while($row = mysql_fetch_row($result))
            {
                $return.= 'INSERT INTO '.$table.' VALUES(';
                for($j=0; $j < $num_fields; $j++) 
                {
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if ($j < ($num_fields-1)) { $return.= ','; }
                }
                $return.= ");\n";
            }
        }
        $return.="\n\n\n";
    }

    //save file
    $handle = fopen('stock'.'.csv','w+');
    fwrite($handle,$return);
    fclose($handle);
    if($handle)
{   
//$msg="Insert Successfully!!";
echo "<script>alert('Backup success');document.location='home.php'</script>";
?>

<?php
}
else
{

//$errmsg=" Insert not success!!";
      echo "<script>alert('Backup not success');document.location='home.php'</script>";

}
}
?>

SQL Server备份和恢复
.btn{
宽度:80px;
高度:30px;
背景#0B49D8;
颜色:#FFFFFF;
}
**php代码如下。您可以更改扩展名.sql或.csv,并更改要保存备份文件的路径。当前备份保存在代码文件所在位置附近的文件中。dabase备份文件名是您可以更改的库存文件**

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

error_reporting(error_reporting() & ~E_NOTICE);
backup_tables('localhost','root','','stock1');

/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{

    $link = mysql_connect($host,$user,$pass);
    mysql_select_db($name,$link);

    //get all of the tables
    if($tables == '*')
    {
        $tables = array();
        $result = mysql_query('SHOW TABLES');
        while($row = mysql_fetch_row($result))
        {
            $tables[] = $row[0];
        }
    }
    else
    {
        $tables = is_array($tables) ? $tables : explode(',',$tables);
    }

    //cycle through
    foreach($tables as $table)
    {
        $result = mysql_query('SELECT * FROM '.$table);
        $num_fields = mysql_num_fields($result);

        $return.= 'DROP TABLE '.$table.';';
        $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
        $return.= "\n\n".$row2[1].";\n\n";

        for ($i = 0; $i < $num_fields; $i++) 
        {
            while($row = mysql_fetch_row($result))
            {
                $return.= 'INSERT INTO '.$table.' VALUES(';
                for($j=0; $j < $num_fields; $j++) 
                {
                    $row[$j] = addslashes($row[$j]);
                    $row[$j] = ereg_replace("\n","\\n",$row[$j]);
                    if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
                    if ($j < ($num_fields-1)) { $return.= ','; }
                }
                $return.= ");\n";
            }
        }
        $return.="\n\n\n";
    }

    //save file
    $handle = fopen('stock'.'.csv','w+');
    fwrite($handle,$return);
    fclose($handle);
    if($handle)
{   
//$msg="Insert Successfully!!";
echo "<script>alert('Backup success');document.location='home.php'</script>";
?>

<?php
}
else
{

//$errmsg=" Insert not success!!";
      echo "<script>alert('Backup not success');document.location='home.php'</script>";

}
}
?>

一个更简洁、更快的选项是使用infle/OUTFILE

$db_conn = mysql_connect('localhost','root','');
mysql_select_db('stackoverflow',$db_conn);

$q = "
    SELECT * FROM mytable INTO OUTFILE '/mytable.csv'
    FIELDS TERMINATED BY ','
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n';
";

$result = mysql_query($q,$db_conn);

这是随后导入数据的最快方法。

更简洁、更快的选项是使用infle/OUTFILE

$db_conn = mysql_connect('localhost','root','');
mysql_select_db('stackoverflow',$db_conn);

$q = "
    SELECT * FROM mytable INTO OUTFILE '/mytable.csv'
    FIELDS TERMINATED BY ','
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n';
";

$result = mysql_query($q,$db_conn);

这是以后使用数据导入的最快方法。

在组合和测试一系列选项后,我能够解决它。我在这里分享,这样那些经历我困境的人就不会像我一样经历困难:(

当用户单击“导出”按钮时,Chrome browser会自动下载一个CSV文件,其中包含数据库副本,包括字段名

<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 
<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 

在组合和测试了一系列选项后,我能够解决它。我在这里分享,这样那些将经历我困境的人就不会像我一样经历困难:(

当用户单击“导出”按钮时,Chrome browser会自动下载一个CSV文件,其中包含数据库副本,包括字段名

<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 
<?php
    include('/connectme.php');

    $thequery = "SELECT * FROM members";
    $result = mysqli_query($conn,$thequery);

    $file = fopen("php://output","w");

    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="exported.' . date("Y.m.d") . '.csv"');
    header('Pragma: no-cache');    
    header('Expires: 0');

    $emptyarr = array();
    $fieldinf = mysqli_fetch_fields($result);
        foreach ($fieldinf as $valu)
    {
        array_push($emptyarr, $valu->name);
        }
    fputcsv($file,$emptyarr);

    while($row = mysqli_fetch_assoc($result))
    {
        fputcsv($file,$row);
    }
    fclose($file);

    mysqli_free_result($result);
    mysqli_close($conn);
?> 


可能是旧版本mysql的重复,但我看到了一个类似的示例,并尝试复制它,除了mysql的去润滑警告之外,它给出了一些错误。没有新的方法可以这样做吗?可能是@jay Post的重复,还有你的代码和错误。我编辑了我的帖子,我几乎找到了一个解决方案:)只剩下一个问题,保存在本地计算机上,而不是服务器目录上。这可能是旧版本mysql的重复。不过,我看到了一个类似的示例,并尝试复制它,除了mysql的去润滑警告之外,它还出现了一些错误。没有新的方法可以做到这一点吗?可能是@jay的重复,请发布您的代码和错误。我编辑了我的post,我几乎找到了一个解决方案:)只剩下一个问题,保存在本地计算机上而不是服务器目录上。我似乎遇到了一个错误:
解析错误:语法错误,意外的“”行被
中的“”(T_常量_ENCAPSED_字符串)终止,该行是
$thequery=“将*从成员中选择到以”“结尾的输出文件'/test.csv'字段中,并用”“括起来”“行以'\n'结尾;”
`@jay我已经对它进行了更新,现在它已经100%经过测试,请原谅使用mysql\u connect它不是这个脚本的重点,运行$q是。此外,这会输出到Windows上的驱动器根目录。我这次没有收到任何错误,但我在服务器目录或我的PC上的任何地方都没有看到任何mytable.csv文件:Doh dare,正如我说的,我已经100%测试过了……如果您在unix系统上,那么它应该在根目录中,但是您可以将“/mytable.csv”调整为一个完整路径,使其指向您希望得到错误的位置:
Parse error:syntax error,意外的“”行以“”(T_CONSTANT_ENCAPSED_STRING)结尾,
中的行是
$thequery=“将*从成员中选择到以”“结尾的输出文件'/test.csv'字段中,并用”“括起来”“行以'\n'结尾;”
`@jay我已经对它进行了更新,现在它已经100%经过测试,请原谅使用mysql\u connect它不是这个脚本的重点,运行$q是。此外,这会输出到Windows上的驱动器根目录。我这次没有收到任何错误,但我在服务器目录或我的PC上的任何地方都没有看到任何mytable.csv文件:Doh dare,正如我说的,我已经100%测试过了……如果您在unix系统上,那么它应该在根目录中,但是您可以将“/mytable.csv”调整为您喜欢的完整路径