如何用.sql文件还原数据库 我从phpmyadmin里导出了个.sql文件 我想用这个文件还原到另一个数据库 请问哪位大虾能告诉我在php代码里如何写吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $sql = file_get_contents("your.sql");然后用mysql_query执行mysql_query($sql); mysql_query一次只能执行一条语句.你要一行一行的读取并执行.读取到一行的sql后,判断当前行的第一个字符是否为#,是则跳过,读取下一行,否则执行. -- phpMyAdmin SQL Dump-- version 3.1.1-- http://www.phpmyadmin.net---- 主机: localhost-- 生成日期: 2010 年 07 月 30 日 03:12-- 服务器版本: 5.1.30-- PHP 版本: 5.2.8SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;/*!40101 SET NAMES utf8 */;---- 数据库: `osc`---- ------------------------------------------------------------ 表的结构 `ebw_address_book`--CREATE TABLE IF NOT EXISTS `ebw_address_book` ( `address_book_id` int(11) NOT NULL AUTO_INCREMENT, `customers_id` int(11) NOT NULL, `entry_gender` char(1) NOT NULL, `entry_company` varchar(255) DEFAULT NULL, `entry_firstname` varchar(255) NOT NULL, `entry_lastname` varchar(255) NOT NULL, `entry_street_address` varchar(255) NOT NULL, `entry_suburb` varchar(255) DEFAULT NULL, `entry_postcode` varchar(255) NOT NULL, `entry_city` varchar(255) NOT NULL, `entry_state` varchar(255) DEFAULT NULL, `entry_country_id` int(11) NOT NULL DEFAULT '0', `entry_zone_id` int(11) NOT NULL DEFAULT '0', `entry_telephone` varchar(255) DEFAULT NULL, `entry_fax` varchar(255) DEFAULT NULL, PRIMARY KEY (`address_book_id`), KEY `idx_address_book_customers_id` (`customers_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;---- 导出表中的数据 `ebw_address_book`--INSERT INTO `ebw_address_book` (`address_book_id`, `customers_id`, `entry_gender`, `entry_company`, `entry_firstname`, `entry_lastname`, `entry_street_address`, `entry_suburb`, `entry_postcode`, 全是这样的东西没有# 直接进入phpmyadmin,进入数据库,执行sql语句,然后都复制进去以后执行不就好拉 <?phpfunction bakindata($filename) { global $db,$charset; $sql=file($filename); $query=''; $num=0; foreach($sql as $key => $value){ $value=trim($value); if(!$value || $value[0]=='#') continue; if(eregi("\;$",$value)){ $query.=$value; if(eregi("^CREATE",$query)){ $extra = substr(strrchr($query,')'),1); $query = str_replace($extra,'',$query); if($db->server_info() > '4.1'){ $extra = $charset ? "ENGINE=MyISAM DEFAULT CHARSET=$charset;" : "ENGINE=MyISAM;"; }else{ $extra = "TYPE=MyISAM;"; } $query .= $extra; }elseif(eregi("^INSERT",$query)){ $query='REPLACE '.substr($query,6); } $db->query($query); $query=''; } else{ $query.=$value; } }}?> $filename是要导入的sql文件的物理路径$db是一个mysql类。你可以换成你自己的$charset是要导入的数据库字符编码 我知道,这个函数可以用的。不是还有if(eregi("\;$",$value)){你直接用就可以了。 错在哪里?错在哪里?错在哪里?错在哪里?错在哪里? 小白提问:php包含文件问题 怎样在php里弹出提示框? 请教一个搜索结果的问题 php远程连接mysql php static codeigniter中设置这样的路由怎么不起作用 PHP开发手机3G页面,问题请教大虾 mysql blocked!!! 新手请教:正则表达式反向引用的疑问 joomla新手问题 求大家帮忙解决这个问题啊。奇怪的php空白
然后用mysql_query执行
mysql_query($sql);
你要一行一行的读取并执行.
读取到一行的sql后,判断当前行的第一个字符是否为#,是则跳过,读取下一行,否则执行.
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- 主机: localhost
-- 生成日期: 2010 年 07 月 30 日 03:12
-- 服务器版本: 5.1.30
-- PHP 版本: 5.2.8SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;--
-- 数据库: `osc`
---- ----------------------------------------------------------
-- 表的结构 `ebw_address_book`
--CREATE TABLE IF NOT EXISTS `ebw_address_book` (
`address_book_id` int(11) NOT NULL AUTO_INCREMENT,
`customers_id` int(11) NOT NULL,
`entry_gender` char(1) NOT NULL,
`entry_company` varchar(255) DEFAULT NULL,
`entry_firstname` varchar(255) NOT NULL,
`entry_lastname` varchar(255) NOT NULL,
`entry_street_address` varchar(255) NOT NULL,
`entry_suburb` varchar(255) DEFAULT NULL,
`entry_postcode` varchar(255) NOT NULL,
`entry_city` varchar(255) NOT NULL,
`entry_state` varchar(255) DEFAULT NULL,
`entry_country_id` int(11) NOT NULL DEFAULT '0',
`entry_zone_id` int(11) NOT NULL DEFAULT '0',
`entry_telephone` varchar(255) DEFAULT NULL,
`entry_fax` varchar(255) DEFAULT NULL,
PRIMARY KEY (`address_book_id`),
KEY `idx_address_book_customers_id` (`customers_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;--
-- 导出表中的数据 `ebw_address_book`
--INSERT INTO `ebw_address_book` (`address_book_id`, `customers_id`, `entry_gender`, `entry_company`, `entry_firstname`, `entry_lastname`, `entry_street_address`, `entry_suburb`, `entry_postcode`, 全是这样的东西没有#
<?php
function bakindata($filename) {
global $db,$charset;
$sql=file($filename);
$query='';
$num=0;
foreach($sql as $key => $value){
$value=trim($value);
if(!$value || $value[0]=='#') continue;
if(eregi("\;$",$value)){
$query.=$value;
if(eregi("^CREATE",$query)){
$extra = substr(strrchr($query,')'),1);
$query = str_replace($extra,'',$query);
if($db->server_info() > '4.1'){
$extra = $charset ? "ENGINE=MyISAM DEFAULT CHARSET=$charset;" : "ENGINE=MyISAM;";
}else{
$extra = "TYPE=MyISAM;";
}
$query .= $extra;
}elseif(eregi("^INSERT",$query)){
$query='REPLACE '.substr($query,6);
}
$db->query($query);
$query='';
} else{
$query.=$value;
} }
}
?>
$db是一个mysql类。你可以换成你自己的
$charset是要导入的数据库字符编码
不是还有if(eregi("\;$",$value)){你直接用就可以了。