我一直在寻找为我的数据库网站启用EXPORT功能的方法。我的目标是构建一个非常简单的PHP代码来完成这项工作,它只需要将我的一个MySQL表的内容导出到用户的桌面,或者为用户提供一个可点击的链接,这样他就可以下载导出的数据库。数据库必须是Excel / CSV(因为我将使用此功能进行导入/导出数据库备份功能)。
我看到了fputcsv()和其他旧方法,比如mysql(而不是mysqli)代码,但都失败了,有些在服务器目录上创建了一个CSV文件,而其他方法简单给出了错误,如
explode()期望参数2为字符串,对象在
中给出或
fputcsv()期望参数2为数组,在
中给出null我觉得这应该很简单,但是用于导出数据库功能的最佳方式或代码是什么?
修改
在组合和测试一系列选项后,我能够解决它。我在这里分享,所以那些经历过我的困境的人不会像我一样困难:(
当用户点击导出按钮时,Chrome浏览器会自动下载包含数据库副本(包括字段名称)的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);
?>
答案 0 :(得分:0)
<form class="elegant-aero" action="backup.php">
<center>
<h1>SQL Server Backup And Restore
</h1>
<style>
.btn{
width:80px;
height:30px;
background:#0B49D8;
color:#FFFFFF;
}
</style>
<label>
<input id="name" type="submit" name="backup" class="btn" value="Backup" />
</label>
</form>
** 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>";
}
}
?>
答案 1 :(得分:0)
更简洁,更快捷的选项是使用INFILE / OUTFILE。所以在PHP中调用以下SQL查询...
$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);
这是随后从数据中导入的最快方法。
答案 2 :(得分:0)
在组合和测试一系列选项后,我能够解决它。我在这里分享,所以那些经历过我的困境的人不会像我一样困难:(
当用户点击导出按钮时,Chrome浏览器会自动下载包含数据库副本(包括字段名称)的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);
?>