仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3621|回复: 18
打印 上一主题 下一主题

[学习教程] 绝无经由的从MySQL导入导出大批数据的法式完成办法

[复制链接]
因胸联盟 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:23:12 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
如果你需要额外的功能的话,MySQL的普及性实际上可以让你发现总有一个厂商会提供准确的解决方案,而这个方案会满足你的需要和需求。    人人必定利用过 phpmyadmin 外面的数据库导入,导出功效,十分便利。然而在实践使用中,我发明以下几个成绩:

1、数据库超越必定尺寸,好比6M 这时候利用导出普通没成绩,可以准确的保留到本机硬盘下面,然而导入则不可!缘由是:普通的 PHP.INI 外面设置一时文件/上传文件的巨细限制为2M,而phpmyadmin利用了上传的体例,形成掉败。

2、导出到硬盘的 .SQL 文件在导回时,常常呈现因为某些单引号的成绩引发掉败,形成导入掉败,只能用 MySQL等使用法式导入了。

我的数据库已超越10M,所以必需处理这个成绩。我的思绪:

导出: 用phpmyadmin 保留数据库/表格布局,用剧本读取数据库内容并保留到文件外面!

导入: 用phpmyadmin 恢单数据库/表格布局,用剧本读取文件,然后保留到库外面!



导出法式以下:挪用办法为 ****.php?table=tablename

这个复杂的法式今朝一次保留一个表格!!每行动一个字段的数据!!


if($table=="")exit();

mysql_connect("localhost","name","passWord");

mysql_select_db("database");

$result = mysql_query("select * from $table");

if(mysql_num_rows($result) <= 0) exit();

echo "入手下手转换数据到文本...

";

$handle = fopen("$table.txt","w");

$numfields = mysql_num_fields($result);

fputs($handle,$numfields."\r\n");

for($k=0;$k

{

$msg = mysql_fetch_row($result);

for($i=0;$i<$numfields;$i++)

{

$msg[$i] = str_replace("\r\n","&&php2000mysqlreturn&&",$msg[$i]);

$msg[$i] = str_replace("\n" ,"&&php2000mysqlreturn&&",$msg[$i]);

fputs($handle,$msg[$i]."\r\n");

}

fputs($handle,"------- php2000 dump data PRogram V1.0 for MySQL --------\r\n");

}

fclose($handle);

echo "ok";

?>



导入的法式以下:用法同下面!


if($table=="")exit();

mysql_connect("localhost","name","password");

mysql_select_db("database");

$message = file("$table.txt");

echo $numfields = chop($message[0]);

for($k=1;$k

{

$value="";

for ($i=$k;$i<($k+$numfields-1);$i++)

{

$tmp = str_replace("&&php2000mysqlreturn&&","\r\n",chop($message[$i]));

$value .= "'".addslashes($tmp)."',";

}

$tmp = str_replace("&&php2000mysqlreturn&&","\r\n",chop($message[$k+$numfields-1]));

$value .= "'".$tmp."'";

$query = "insert into $table values (".$value.")";

echo mysql_error();

mysql_query($query);

echo $k." ";

}

echo "ok";

?>



利用办法和能够的成绩!

1、导入时 file()函数能够会有成绩(我的10M的数据没呈现成绩),可以改成 fopen()然后没次读一行!!

2、导入,导出都需求用 ftp 操作,也就是导出后,用 ftp 把数据转到本机,导入时先用ftp转移数据到办事器!使用它开发程序也是非常简单的。”
因胸联盟 该用户已被删除
沙发
 楼主| 发表于 2015-3-8 23:24:34 | 显示全部楼层
不好!如果出了错;不好调试;不好处理!其实web开发将代码分为3层:web层;业务逻辑层和数据访问层;一般对数据库的操作都在数据访问层来做;这样便于调试和维护!而且将来如果是换了数据库的话;你只需要改数据层的代码;其他层的基本可以不变!要是你在jsp中直接调用sql数据库;那么如果换了数据库呢?岂不都要改?如果报了异常呢?怎么做异常处理?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-2 12:49

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表