2011-06-21 回答
一、一般步骤
1、用phpadmin生成csv格式文件
以php+mysql模式建立个人主页的读者,在自己的机器上都有php+mysql环境吧在这个环境下,用phpadmin生成以分 为分隔符的dotmud.csv文件。
2、将dotmud.csv文件通过ftp上传到服务器。
3、上传data.php程序(程序附后),在浏览器调用data.php程序,将dotmud.csv文件的内容加入到数据库。
二、特殊处理
一般的数据,通过上述步骤,基本可以顺利上传。但对于包含特殊字符的数据(比如数据库记录中包含换行符、单引 、分 ),就要做些特殊的处理。
1、换行符的处理
php的fgetcsv()函数以换行符作为每行的结束标志。如果mysql数据表的记录包含换行符,fgetcsv()就不能完整读取记录行。
笔者的解决方法是修改phpadmin的lib.inc.php3文件(读者也可以不修改phpadmin文件,而是用其他方法直接加工phpadmin生成的dotmud.csv文件,达到同样的效果)的get_table_csv()函数:
在 $schema_insert=ereg_replace($sep.”$”,””,$schema_insert) 行后加入如下命令行
$schema_insert=ereg_replace(“rn”,”`return`”,$schema_insert)
将换行符转换为不容易出现的换行标识串`return`(读者可根据自己数据的特点设置独特的换行标识串),再在data.php程序中加一行命令$data[$i]=ereg_replace(“`return`”,”rn”,$data[$i]),用来将换行标识串还原成换行符。
2、分隔符的处理
如果mysql记录行恰好包含csv分隔符,fgetcsv()进行分隔处理时就会出现问题。
笔者仍然是通过修改lib.inc.php3文件解决的。
在get_table_csv()的$schema_insert=”$row[$j]”.$sep行前加一行
$row[$j]=ereg_replace($sep,”`return_sep`”,$row[$j]) 命令,将分隔符转为分隔标识串`return_sep`,同时在data.php中用命令行 $data[$i]=ereg_replace(“`return_sep`”,”;”,$data[$i]) 进行还原处理。
3、单引 的处理
mysql的sql语句行对单引 有特殊的定义,如果直接提交含单引 的sql语句,就会出错。这种情况需要加上转义符。在data.php中加一行 $data[$i]=ereg_replace(“‘”,”‘”,$data[$i]) 就可解决。
另外,在数据记录特别多的的情况下,dotmud.csv文件可能比较大,如果在服务器的限定时间内不能执行完data.php程序,就需要按行分拆dotmud.csv。如笔者有个7000行的dotmud.csv文件,在自己的机器上执行到600行就提示超时,便拆成10个文件上传到全路互联(www.wayall.com),结果对方的服务器速度快,每个文件的处理时间还不到1秒,而php默认的限定执行时间可是30秒啊!看来我做的分拆实属多余。
以上方法解决了数据库内容的上传问题。对于数据库结构的上传,只要稍微修改一下data.php程序就可实现。其实,如果库结构比较简单,用phpadmin更方便。
文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树首页概览31412 人正在系统学习中 相关资源:免费的linux操作软件SecureCRT.zip-其它工具类资源-CSDN文库
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!