PHP如何导出数据库(以PHP导出MySQL数据库为例)

文 / @UTHEME

84323d2bc51332110f7c409790dba2ad

很多朋友在开发定时备份网站数据等相关功能的时候,都会需要导出数据库等相关功能。下面UTHEME就为大家提供几种简单的备选方案,方便大家二次开发。

PHP备份/导出MySQL数据库脚本方案1

function utheme_backup_tables( $host, $user, $pass, $name, $tables = '*') {
    if( ! $link = mysql_connect( $host, $user, $pass ) ) return;
    if( ! mysql_select_db( $name, $link ) ) return;
	mysql_query("set names 'utf8'");
    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 );
    }
	$date = date('Y 年 m 月 d 日 H:i:s', time() );
	$mysqlinfo = mysql_query( 'SELECT VERSION()');
	$mysqlinfo = mysql_fetch_row( $mysqlinfo );
	$mysqlinfo = $mysqlinfo[0];
	$phpinfo = PHP_VERSION;
	$return = "--\n";
	$return .= "-- 背字根数据库备份脚本\n";
	$return .= "-- 主机:$host\n";
	$return .= "-- 生成日期:$date\n";
	$return .= "-- 数据库版本:$mysqlinfo\n";
	$return .= "-- PHP版本:$phpinfo\n";
	$return .= "--\n";
	$return .= "-- 数据库: `$name`\n";
	$return .= "--\n\n";
	$return .= "-- --------------------------------------------------------\n\n";
    foreach( $tables as $table ) {
        $result = mysql_query( 'SELECT * FROM ' . $table );
        $num_fields = mysql_num_fields( $result );
		$return .= "--\n";
        $return .= "-- 表的结构 `$table`\n";
		$return .= "--";
        $row2 = mysql_fetch_row( mysql_query( 'SHOW CREATE TABLE ' . $table ) );
        $return .= "\n\n" . $row2[1] . ";\n\n";
		$return .= "--\n";
        $return .= "-- 转存表中的数据 `$table`\n";
		$return .= "--\n\n";
		while( $row = mysql_fetch_row( $result ) ) {
			$return .= "INSERT INTO `$table` VALUES (";
			for( $i=0; $i<$num_fields; $i++ ) {
				$row[$i] = mysql_real_escape_string( $row[$i] );
				if ( isset( $row[$i] ) ) {
					if( is_numeric($row[$i]) ) {
						$return .= $row[$i];
					} else {
						$return .= "'$row[$i]'";
					}
				} else {
					$return .= '""';
				}
				if ( $i < ($num_fields-1) ) {
					$return .= ', ';
				}
			}
			$return .= ");\n";
		}
        $return .= "\n\n";
    }
	mysql_close($link);
	return $return;
}

网上的脚本大多数没有对内容进行转义,一些脚本使用addslashes函数来转义,这样内容中的换行会使导出的内容看起来很乱,这里我使用mysql_real_escape_string函数来转义,导出的内容和使用phpMyAdmin导出的一致。

将导出的数据写入文件并打包:

$host = 'xxx.xxx.xxx.com:3306';
$user = 'tiezhushuo';
$pass = '123456';
$name = 'utheme';	
$filename = __DIR__ . '/' . $name . '_' . time() . '.sql';
$mysql = bzg_backup_tables( $host, $user, $pass, $name );
if( $mysql ) {
	$fp = fopen( $filename, 'w' );
	fputs( $fp, $mysql );
	fclose( $fp );
}
if( file_exists( $filename ) ) {
	$zip = new ZipArchive;
	if ( $zip->open( $filename . '.zip', ZIPARCHIVE::CREATE ) === TRUE ) {
		$zip->addFile( $filename, basename( $filename ) );
		$zip->close();
		unlink( $filename );
		$filename = $filename . '.zip';
	}
}

PHP备份/导出MySQL数据库脚本方案2

// 连接到MySQL数据库
$host = 'localhost';
$user = 'username';
$password = 'password';
$dbname = 'database_name';
$conn = mysqli_connect($host, $user, $password, $dbname);
// 设置查询
$query = 'SELECT * FROM table_name';
// 执行查询
$result = mysqli_query($conn, $query);
// 如果查询成功
if ($result) {
// 创建CSV文件
$csv_file = fopen('export.csv', 'w');
// 循环读取查询结果

while ($row = mysqli_fetch_assoc($result)) {
// 将每一行的数据写入CSV文件
fputcsv($csv_file, $row);
}
// 关闭CSV文件
fclose($csv_file);
}
// 关闭数据库连接
mysqli_close($conn);

在这个例子中,我们使用 mysqli_connect() 函数来连接到MySQL数据库,然后使用 mysqli_query() 函数来执行查询,并使用 mysqli_fetch_assoc() 函数来读取查询结果。

接着,我们使用 fopen() 函数来创建一个CSV文件,然后使用 fputcsv() 函数来将查询结果写入文件,最后使用 fclose() 函数来关闭文件。

需要注意的是,这只是一个简单的例子,并不能作为完整的脚本使用。更复杂的脚本可能会涉及到其他功能,比如处理文件名、分页查询

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。