备份MySQL数据库PHP脚本
Internet上有很多可用的脚本,这些脚本使您可以将数据库中的数据转储为可用于在其他位置复制该数据库结构的格式。以下功能是我对这种常见脚本的看法。
$data ) { if ( strpos(strtolower($columns[$field]['Type']), 'int') !== false || strpos(strtolower($columns[$field]['Type']), 'float') !== false || strpos(strtolower($columns[$field]['Type']), 'tinyint') !== false ) { if ( strlen($data) > 0 ) { $fields[] = $data; } else { if ( strtolower($columns[$field]['Null']) == 'no' ) { $fields[] = 0; } else { $fields[] = "NULL"; } } } elseif ( strpos(strtolower($columns[$field]['Type']), 'datetime') !== false ) { if ( strlen($data) > 0 ) { $fields[] = "\"".$data."\"" ; } else { if ( strtolower($columns[$field]['Null']) == 'no' ) { $fields[] = '""'; } else { $fields[] = "NULL"; } } } elseif ( strpos(strtolower($columns[$field]['Type']), 'time') !== false ) { if ( strlen($data) > 0 ) { $fields[] = "\"".$data."\"" ; } else { if ( strtolower($columns[$field]['Null']) == 'no' ) { $fields[] = '""'; } else { $fields[] = "NULL"; } } } elseif ( strpos(strtolower($columns[$field]['Type']), 'varchar') !== false || strpos(strtolower($columns[$field]['Type']), 'text') !== false || strpos(strtolower($columns[$field]['Type']), 'longtext') !== false || strpos(strtolower($columns[$field]['Type']), 'mediumtext') !== false ) { $data = addslashes($data); $data = trim(ereg_replace("\n", "\\n", $data)); if ( strlen($data) > 0 ) { $fields[] = "\"".$data."\"" ; } else { if ( strtolower($columns[$field]['Null']) == 'no' ) { $fields[] = '""'; } else { $fields[] = "NULL"; } } } else { //$columns[$field]['Type']将包含数据类型 if ( strlen($data) > 0 ) { $fields[] = "\"".$data."\"" ; } else { if ( strtolower($columns[$field]['Null']) == 'no' ) { $fields[] = '""'; } else { $fields[] = "NULL"; } } } } $result .= implode(',', $fields); $result .= ");\n"; } return $result . "\n\n\n"; }
您可以通过以下方式调用该函数。因为此函数一次只查看一个表,所以有必要运行SHOWTABLES查询以获取数据库中表的列表。然后使用它来构造创建表和插入数据所需的SQL。
$con = mysql_connect('localhost','username','password'); mysql_select_db('thedatabase'); $result = mysql_query("SHOW TABLES;"); while ( $row = mysql_fetch_row($result) ) { $table = $row[0]; //转储数据 echo datadump($table, true, true); }
该datadump()函数具有三个参数。第一个只是包含表名的字符串。第二个是布尔值,如果设置为true,则会导致输出的SQL删除并重新创建表,否则将使用截断来清除表。第三个值是一个布尔值,该布尔值使函数删除SQL中的所有`,有时会引起问题。只有第一个参数是必需的,第二个参数默认为true,这意味着将删除并重新创建表。
该函数的工作方式是获取表名称,然后使用该名称在从表中获取所有数据之前获取重新创建表所需的语法(如果设置了此选项)。然后,它查找表的结构,并使用它来输出一条插入语句,即使该值为空,该语句也可以正确地对数据进行转义。
该data_dump()函数返回一个字符串,因此它有可能将内容写入文件中,而不仅仅是输出它们。如果您的数据集很小,则将所有内容打印出来即可。如果有很多事情要做,该脚本的确会崩溃,因此在这种情况下可能值得将其写入文件,同时增加了脚本可以运行的时间。
请注意,您不应依赖此脚本创建的数据。如果要使用它,那么我建议您进行一次空运行以确保所有内容都能按预期插入。该脚本已在不同的数据库上进行了多次迭代和简单测试,但尚未经过全面测试。