发现自己之前写的php导出sql数据为excel文件在导出一些数据的时候出现了精度的问题,比如导出身份证号的时候会把后面变成0000。暂时先把这个问题留下,有空去看看到底是什么问题。 写了一个导出sql的工具。稍微加了下界面,把功能也做多了点,简单来说,就是
发现自己之前写的php导出sql数据为excel文件在导出一些数据的时候出现了精度的问题,比如导出身份证号的时候会把后面变成0000。暂时先把这个问题留下,有空去看看到底是什么问题。
写了一个导出sql的工具。稍微加了下界面,把功能也做多了点,简单来说,就是三个功能:
1.直接在浏览器上显示sql文件内容。
2.直接导出到服务器上,要求目录要可写。
3.直接下载到本地,脱库时感觉还不错。
立即学习“PHP免费学习笔记(深入)”;
好了直接贴上代码:
sqldump.php
<?<span>php
</span><span>if</span> (<span>isset</span>(<span>$_REQUEST</span>['option'<span>])) {
</span><span>define</span>('DOWNLOAD', <span>$_REQUEST</span>['option'<span>]);
}</span><span>else</span><span>{
</span><span>define</span>('DOWNLOAD',0);<span>//</span><span>0代表直接显示,1代表下载,2代表导出在本地</span>
<span> }
</span><span>if</span> (DOWNLOAD != 1<span>) {
</span><span>header</span>("Content-type:text/html;charset=utf-8"<span>);
}
</span><span>$cfg_dbhost</span> ='localhost'<span>;
</span><span>$cfg_dbname</span> ='mysql'<span>;
</span><span>$cfg_dbuser</span> ='root'<span>;
</span><span>$cfg_dbpwd</span> =''<span>;
</span><span>$cfg_db_language</span> ='utf8'<span>;
</span><span>//</span><span>配置信息</span>
<span>$cfg_dbhost</span> = <span>isset</span>(<span>$_REQUEST</span>['dbhost'])?<span>$_REQUEST</span>['dbhost']:<span>$cfg_dbhost</span><span>;
</span><span>$cfg_dbname</span> = <span>isset</span>(<span>$_REQUEST</span>['dbname'])?<span>$_REQUEST</span>['dbname']:<span>$cfg_dbname</span><span>;
</span><span>$cfg_dbuser</span> = <span>isset</span>(<span>$_REQUEST</span>['dbuser'])?<span>$_REQUEST</span>['dbuser']:<span>$cfg_dbuser</span><span>;
</span><span>$cfg_dbpwd</span> = <span>isset</span>(<span>$_REQUEST</span>['dbpwd'])?<span>$_REQUEST</span>['dbpwd']:<span>$cfg_dbpwd</span><span>;
</span><span>$cfg_db_language</span> = <span>isset</span>(<span>$_REQUEST</span>['dbc'])?<span>$_REQUEST</span>['dbc']:<span>$cfg_db_language</span><span>;
</span><span>$to_file_name</span> =<span>isset</span>(<span>$_REQUEST</span>['dbtable'])?<span>$_REQUEST</span>['dbtable'].".sql":<span>$cfg_dbname</span>.".sql"<span>;
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>$to_file_name</span> =<span>isset</span>(<span>$_REQUEST</span>['dbtable'])?<span>dirname</span>(<span>__FILE__</span>).DIRECTORY_SEPARATOR.<span>$_REQUEST</span>['dbtable'].".sql":<span>dirname</span>(<span>__FILE__</span>).DIRECTORY_SEPARATOR.<span>$cfg_dbname</span>.".sql"<span>;
}
</span><span>//</span><span> END 配置
//链接数据库</span>
<span>$link</span> = @<span>mysql_connect</span>(<span>$cfg_dbhost</span>,<span>$cfg_dbuser</span>,<span>$cfg_dbpwd</span><span>);
</span><span>$link</span>==<span>null</span>?<span>die</span>('mysql connect error'):''<span>;
@</span><span>mysql_select_db</span>(<span>$cfg_dbname</span><span>);
</span><span>//</span><span>选择编码</span>
@<span>mysql_query</span>("set names ".<span>$cfg_db_language</span><span>);
</span><span>//</span><span>数据库中有哪些表</span>
<span>$tabList</span> = <span>isset</span>(<span>$_REQUEST</span>['dbtable'])?<span>array</span>("{<span>$_REQUEST</span>['dbtable']}"):list_tables(<span>$cfg_dbname</span><span>);
</span><span>$tabList</span>==<span>null</span>?<span>die</span>('no tables found'):''<span>;
</span><span>if</span> (DOWNLOAD==1<span>) {
</span><span>Header</span>("Content-type: application/octet-stream"<span>);
</span><span>Header</span>("Accept-Ranges: bytes"<span>);
</span><span>Header</span>("Content-Disposition: attachment; filename=".<span>$to_file_name</span><span>);
}
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>echo</span> "正在导出...<hr/>"<span>;
}
</span><span>$info</span> = "-- ----------------------------\r\n"<span>;
</span><span>$info</span> .= "-- 备份日期:".<span>date</span>("Y-m-d H:i:s",<span>time</span>())."\r\n"<span>;
</span><span>$info</span> .= "-- ----------------------------\r\n\r\n"<span>;
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>file_put_contents</span>(<span>$to_file_name</span>,<span>$info</span>,<span>FILE_APPEND);
}</span><span>else</span><span>{
</span><span>echo</span> <span>$info</span><span>;
}
</span><span>//</span><span>将每个表的表结构导出到文件</span>
<span>foreach</span>(<span>$tabList</span> <span>as</span> <span>$val</span><span>){
</span><span>$sql</span> = "show create table ".<span>$val</span><span>;
</span><span>$res</span> = @<span>mysql_query</span>(<span>$sql</span>,<span>$link</span><span>);
</span><span>if</span> (<span>$res</span>==<span>null</span><span>) {
</span><span>die</span>('table `'.<span>$val</span>.'` not EXISTS'<span>);
}
</span><span>$row</span> = @<span>mysql_fetch_array</span>(<span>$res</span><span>);
</span><span>$info</span> = "-- ----------------------------\r\n"<span>;
</span><span>$info</span> .= "-- Table structure for `".<span>$val</span>."`\r\n"<span>;
</span><span>$info</span> .= "-- ----------------------------\r\n"<span>;
</span><span>$info</span> .= "DROP TABLE IF EXISTS `".<span>$val</span>."`;\r\n"<span>;
</span><span>$sqlStr</span> = <span>$info</span>.<span>$row</span>[1].";\r\n\r\n"<span>;
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>//</span><span>追加到文件</span>
<span>file_put_contents</span>(<span>$to_file_name</span>,<span>$sqlStr</span>,<span>FILE_APPEND);
}</span><span>else</span><span>{
</span><span>echo</span> <span>$sqlStr</span><span>;
}
</span><span>//</span><span>释放资源</span>
@<span>mysql_free_result</span>(<span>$res</span><span>);
}
</span><span>//</span><span>将每个表的数据导出到文件</span>
<span>foreach</span>(<span>$tabList</span> <span>as</span> <span>$val</span><span>){
</span><span>if</span>(DOWNLOAD==2<span>){
</span><span>echo</span> "正在导出表`".<span>$val</span>."`...<br>"<span>;
}
</span><span>$sql</span> = "select * from ".<span>$val</span><span>;
</span><span>$res</span> = @<span>mysql_query</span>(<span>$sql</span>,<span>$link</span><span>);
</span><span>//</span><span>如果表中没有数据,则继续下一张表</span>
<span>if</span>(@<span>mysql_num_rows</span>(<span>$res</span>)<1) <span>continue</span><span>;
</span><span>//
</span> <span>$info</span> = "-- ----------------------------\r\n"<span>;
</span><span>$info</span> .= "-- Records for `".<span>$val</span>."`\r\n"<span>;
</span><span>$info</span> .= "-- ----------------------------\r\n"<span>;
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>file_put_contents</span>(<span>$to_file_name</span>,<span>$info</span>,<span>FILE_APPEND);
}</span><span>else</span><span>{
</span><span>echo</span> <span>$info</span><span>;
}
</span><span>//</span><span>读取数据</span>
<span>while</span>(<span>$row</span> = @<span>mysql_fetch_row</span>(<span>$res</span><span>)){
</span><span>$sqlStr</span> = "INSERT INTO `".<span>$val</span>."` VALUES ("<span>;
</span><span>foreach</span>(<span>$row</span> <span>as</span> <span>$zd</span><span>){
</span><span>$sqlStr</span> .= "'".<span>$zd</span>."', "<span>;
}
</span><span>//</span><span>去掉最后一个逗号和空格</span>
<span>$sqlStr</span> = <span>substr</span>(<span>$sqlStr</span>,0,<span>strlen</span>(<span>$sqlStr</span>)-2<span>);
</span><span>$sqlStr</span> .= ");\r\n"<span>;
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>file_put_contents</span>(<span>$to_file_name</span>,<span>$sqlStr</span>,<span>FILE_APPEND);
}</span><span>else</span><span>{
</span><span>echo</span> <span>$sqlStr</span><span>;
}
}
</span><span>//</span><span>释放资源</span>
@<span>mysql_free_result</span>(<span>$res</span><span>);
</span><span>if</span> (DOWNLOAD==2<span>) {
</span><span>file_put_contents</span>(<span>$to_file_name</span>,"\r\n",<span>FILE_APPEND);
}</span><span>else</span><span>{
</span><span>echo</span> "\r\n"<span>;
}
}
</span><span>if</span>(DOWNLOAD==2<span>){
</span><span>echo</span> "<hr/>导出成功。"<span>;
}
</span><span>//</span><span> echo "End!";</span>
<span>function</span> list_tables(<span>$database</span><span>)
{
</span><span>$sql</span>='SHOW TABLES FROM '.<span>$database</span><span>;
</span><span>$rs</span> = <span>mysql_query</span>(<span>$sql</span><span>);
</span><span>$tables</span> = <span>array</span><span>();
</span><span>while</span> (<span>$row</span> = <span>mysql_fetch_row</span>(<span>$rs</span><span>)) {
</span><span>$tables</span>[] = <span>$row</span>[0<span>];
}
</span><span>mysql_free_result</span>(<span>$rs</span><span>);
</span><span>return</span> <span>$tables</span><span>;
}
</span>?>然后是界面的东西了,为的是不让自己去记这个烦人的参数。
sqldumpclient.html
<span><</span><span>html</span><span>></span>
<span><</span><span>head</span><span>></span>
<span><</span><span>title</span><span>></span>sqldump客户端<span></</span><span>title</span><span>></span>
<span><</span><span>meta </span><span>charset</span><span>='utf-8'</span><span>></span>
<span><</span><span>script </span><span>type</span><span>="text/javascript"</span><span>></span>
<span>function</span><span> setaction () {
$(</span><span>'</span><span>cform</span><span>'</span><span>).action</span><span>=</span><span>$(</span><span>'</span><span>act</span><span>'</span><span>).value;
inputs</span><span>=</span><span>document.getElementsByTagName(</span><span>'</span><span>input</span><span>'</span><span>);
</span><span>for</span><span>(</span><span>var</span><span> i </span><span>=</span><span>1</span><span>;i</span><span><</span><span>inputs.length</span><span>-</span><span>4</span><span>;i</span><span>++</span><span>){
</span><span>if</span><span> (inputs[i].value</span><span>!=</span><span>''</span><span>) {
inputs[i].name</span><span>=</span><span>inputs[i].id;
}
}
}
</span><span>function</span><span> $(id){
</span><span>return</span><span> document.getElementById(id);
}
</span><span></</span><span>script</span><span>></span>
<span></</span><span>head</span><span>></span>
<span><</span><span>body</span><span>></span>
<span><</span><span>center</span><span>></span>
<span><</span><span>h1 </span><span>align</span><span>="center"</span><span>></span>PHP sql dump<span></</span><span>h1</span><span>></span>
<span><</span><span>h3 </span><span>align</span><span>="right"</span><span>></span>Author:Medici.Yan@gmail.com<span></</span><span>h3</span><span>></span>
<span><</span><span>form </span><span>method</span><span>="post"</span><span> id</span><span>='cform' </span><span>onsubmit</span><span>="setaction()"</span><span>></span>
<span><</span><span>fieldset</span><span>></span>
<span><</span><span>table</span><span>></span>
<span><</span><span>legend</span><span>></span>配置<span></</span><span>legend</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="act"</span><span>></span>脚本地址:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>='act' </span><span>placeholder</span><span>="http://www.example.com/sqldump.php"</span><span>/></</span><span>td</span><span>></span>
<span><</span><span>td </span><span>rowspan</span><span>="7"</span><span> width</span><span>="100"</span><span>></span>使用方法:把sqldump.php传到服务器上,然后在这里填写相关参数,也可以直接访问脚本<span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbhost"</span><span>></span>数据库地址:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>="dbhost"</span><span> placeholder</span><span>="默认:localhost"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbname"</span><span>></span>数据库名:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>="dbname"</span><span> placeholder</span><span>="默认:mysql"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbuser"</span><span>></span>用户名:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>="dbuser"</span><span> placeholder</span><span>="默认:root"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbpwd"</span><span>></span>密码:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>="dbpwd"</span><span> placeholder</span><span>="默认:<empty>"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbc"</span><span>></span>字符集:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>></span>
<span><</span><span>input </span><span>list</span><span>="charlist"</span><span> id</span><span>="dbc"</span><span> placeholder</span><span>="默认:utf8"</span> <span>/></span>
<span><</span><span>datalist </span><span>id</span><span>="charlist"</span><span>></span>
<span><</span><span>option </span><span>value</span><span>="utf8"</span> <span>/></span>
<span><</span><span>option </span><span>value</span><span>="gbk"</span> <span>/></span>
<span><</span><span>option </span><span>value</span><span>="gb2312"</span> <span>/></span>
<span></</span><span>datalist</span><span>></span>
<span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="dbtable"</span><span>></span>表名:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="text"</span><span> id</span><span>="dbtable"</span><span> placeholder</span><span>="为空代表所有表"</span><span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>label </span><span>for</span><span>="option"</span><span>></span>导出方式:<span></</span><span>label</span><span>></</span><span>td</span><span>></span>
<span><</span><span>td</span><span>></span>
<span><</span><span>input </span><span>type</span><span>="radio"</span><span> id</span><span>="option"</span><span> name</span><span>="option"</span><span> value</span><span>="0"</span><span> checked</span><span>="checked"</span><span>></span><span>浏览器显示
</span><span><</span><span>input </span><span>type</span><span>="radio"</span><span> id</span><span>="option"</span><span> name</span><span>="option"</span><span> value</span><span>="1"</span><span>></span><span>下载到本地
</span><span><</span><span>input </span><span>type</span><span>="radio"</span><span> id</span><span>="option"</span><span> name</span><span>="option"</span><span> value</span><span>="2"</span><span>></span><span>导出至服务器
</span><span></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span><</span><span>tr</span><span>></span>
<span><</span><span>td</span><span>><</span><span>input </span><span>type</span><span>="submit"</span><span> value</span><span>="开始"</span> <span>/></</span><span>td</span><span>></span>
<span></</span><span>tr</span><span>></span>
<span></</span><span>table</span><span>></span>
<span></</span><span>fieldset</span><span>></span>
<span></</span><span>form</span><span>></span>
<span></</span><span>center</span><span>></span>
<span></</span><span>body</span><span>></span>
<span></</span><span>html</span><span>></span>用法也很简单,把sqldump.php传到服务器上,然后在本地运行sqldumpclient.html,写上相关参数就OK。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号