• PHP实用工具:实现Excel转Mysql工具自动字段长度


    所得Mysql语句一般适合查立得万能搜等mysql只查不改的系统。 

    1. $t = "Excel转Mysql工具";
    2. $s = "Excel复制过来的二维结构表内容,第一行各列字段名(列标题),以后一行一条数据";
    3. $yw = "chalide".date("YmdH");
    4. $datedir = "";
    5. function txttihuan($stext){
    6. $stext = str_replace(array("\r\n","\r","\n"),"
      "
      ,$stext);
    7. $stext = str_replace(array("\t"),"
      "
      ,$stext);
    8. return addslashes($stext);//htmlspecialchars($stext);
    9. }
    10. function ss($Key){
    11. $html="";
    12. exit($html);
    13. }
    14. $base = trim($_POST['name']);
    15. if (strlen($base)>10){
    16. $files="S2".date("YmdHis");
    17. $uptis = "上传失败:";
    18. if(!stristr($base,"\t"))$uptis .= "制表符;
      "
      ;
    19. if(!stristr($base,"\n"))$uptis .= "回车符;
      "
      ;
    20. if($uptis<>"上传失败:") ss("提交内容由Excel复制过来:应当包含:".$uptis);
    21. file_put_contents($datedir.$files.".csv", $base);
    22. $file = fopen($datedir.$files.".csv", 'r');
    23. $header = fgetcsv($file);
    24. $max_lengths = array_fill(0, count($header), 12);
    25. while (($line = fgetcsv($file,0,"\t")) !== false) {
    26. foreach ($line as $i => $value) {
    27. $max_lengths[$i] = max($max_lengths[$i], strlen($value));
    28. }
    29. }
    30. fclose($file);
    31. $file = fopen($datedir.$files.".csv",'r') or ss("读取失败:读取上传文件内容失败!");
    32. $ii=-1; $ix1="|"; $ix0=0;
    33. $xs1tao ="
    34. -- -公共说明:本功能适合查立得php+mysql无后台查询!
    35. -- -公共说明:你需要修改表名称`$yw`为实际(多处)!
    36. ";
    37. $xs2tao ="
    38. -- -建表结构说明:ID字段自动增加,请确保其他字段都不是ID,其他字段均为文本!
    39. -- -字段长度说明:varchar(*)中*号自动为csv各列最高长度 请根据自己实际修改(中文得乘3)以免只写入部分值
    40. -- -可选性能提升:请根据实际修改索引字段INDEX(),UNIQUE KEY(),FULLTEXT()等
    41. -- -其他:数据库引擎InnoDB/Myisam 编码等
    42. ";
    43. $px ="-- -如果表已存在则先清空表,不需要则删除忽略!\r\n";
    44. $px .= "DROP TABLE IF EXISTS `".$yw."`;\r\n\r\n";
    45. while ($data = fgetcsv($file,0,"\t")){
    46. $ii++; $io=0;
    47. $pt = "-- -以下是写入新数据Sql;\r\n";
    48. $pt .= "INSERT INTO `$yw` (";
    49. $pa = "-- -以下是建表Sql;建表用\r\n";
    50. $pa .= "CREATE TABLE `$yw` (\r\n";
    51. $pa .= "`id` int(10) unsigned NOT NULL AUTO_INCREMENT,\r\n";
    52. if($ii."a"=="0a"){
    53. $dd=array(); $par="\r\n-- - 如需索引自定义修改以下内容后加在PRIMARY KEY (`id`)前\r\n";
    54. foreach($data as $keyy=>$valy) {
    55. $io++; $valy = txttihuan($valy); $dd[$io]=$valy; $ilen = $max_lengths[$keyy];
    56. $pa .= "`$valy` varchar($ilen) COMMENT '$valy' DEFAULT 'Null',\r\n";
    57. if($io."a"=="1a"){ $pt .= "`$valy`"; }else{ $pt .= ", `$valy`"; }
    58. }
    59. if($dd[1]) $par .= "-- -普通索引参考: INDEX ".$dd[1]." (`".$dd[1]."`),\r\n";
    60. if($dd[1]) $par .= "-- -全文索引参考: FULLTEXT (`".$dd[1]."`),\r\n";
    61. if($dd[2]) $par .= "-- -唯一索引参考: UNIQUE KEY `".$dd[2]."` (`".$dd[2]."`),\r\n";
    62. $pa .= "PRIMARY KEY (`id`)\r\n";
    63. $pa .= ") ENGINE=InnoDB DEFAULT CHARSET=utf8;";
    64. $pt .= ") VALUES ";
    65. $lix = $io; $rst = "$xs1tao\r\n$px\r\n$pa\r\n$par\r\n\r\n$xs2tao\r\n$pt";
    66. }else{
    67. foreach($data as $keyy=>$valy) {
    68. $io++; $valy = txttihuan($valy);
    69. if($io."a"=="1a"){ $linex = "\r\n('$valy'";}else{$linex .= ", '$valy'"; }
    70. }
    71. if(!stristr("-{$lix}-","-{$io}-")){ $ix1.="$ii|"; $ix0++;}
    72. $rst .= "$linex),";
    73. }
    74. }
    75. $rst = Trim($rst,",").";";
    76. if (@unlink($datedir.$files.".csv")){ }
    77. if($ix0>0) $tips = "
      可能有{$ix0}行单元格包含制表符或者回车换行,不正常($ix1)"
      ;
    78. }
    79. ?>"-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    80. "http://www.w3.org/1999/xhtml">
    81. "Content-Type" content="text/html; charset=utf-8" />
    82. "X-UA-Compatible" content="IE=EmulateIE7" />
    83. <span class="hljs-meta"><?php</span> <span class="hljs-keyword">echo</span> <span class="hljs-variable">$t</span>; <span class="hljs-meta">?></span> - <span class="hljs-meta"><?php</span> <span class="hljs-keyword">echo</span> <span class="hljs-variable">$h</span>; <span class="hljs-meta">?></span>
    84. "author" content="yujianyue, admin@ewuyi.net">
    85. "copyright" content="www.12391.net">
    86. "main">
    87. 'onebyone'>
    88. "md">
    89. class="w">
    90. <legend>php echo $t; ?>(<b>php echo $h; ?>b>)功能内测中legend>
    91. <div id="tab02">
    92. php if(strlen($rst)>1){?>
    93. 转化结果

      1. echo $tips; ?>
      2. class="so_bax" id="t2">
      3. <textarea name="name" class="txts" id="name" placeholder="转化后内容" onfocus="st('name',2);" onBlur="sta(2)" >
      4. php echo $rst; ?>
      5. textarea>
      6. <b>继续转化b>请点下边一行。<br>
      7. div>
      8. ol>
      9. php } ?>
      10. <h4> xlsMysql h4>
      11. <ol>
      12. <form name="queryForm" method="post" action="?t=php echo date("YmdHis");?>" onsubmit="return sta(0);">
      13. <div class="so_bax" id="t2">
      14. <textarea name="name" class="txts" id="name" placeholder="php echo $s; ?>" onfocus="st('name',2);" onBlur="sta(2)" >php echo $s; ?>textarea>
      15. div>
      16. <div class="so_but">
      17. <input type="submit" name="button" class="buts" id="sub" value="立即转化" />
      18. div>
      19. <div id="tishi2" style="display:none;">Excel复制过来的二维结构表内容div>
      20. form>
      21. ol>
      22. <h4> 功能说明h4>
      23. <ol>
      24. Excel表格二维结构部分内容转为Mysql数据(去回车换行及制表符)。
      25. ol>
      26. <h4> 使用须知h4>
      27. <ol>
      28. 1. 二维表:第一行列标题,以后一行一条数据。<br>
      29. 2. 无合并单元格:即每行一条数据,第一行每个字段(每格)对应列。<br>
      30. 3. 主动字段长度但均为文本格式,一般适合查立得万能搜等只查不改系统。<br>
      31. ol>
      32. div><script type="text/javascript">
      33. script>
      34. fieldset>div>
      35. div>
      36. <div id='fooder' class="linkar">
      37. div>
      38. body>
      39. html>

    94. 相关阅读:
      集合知识点总结
      tinyxml 代码解读
      钟汉良日记:百善孝为先,其它都靠边
      PHP将数据集转换成树状结构
      Delphi 开发so库,Delphi 调用SO库
      STM32 外部中断
      vue3-响应式函数
      【计算机网络】 集线器、网桥、交换机、路由器看这一篇就懂了。实验: 路由器的作用,以及没有路由器的情况下,如何用三层交换机实现路由器的功能
      最新 MySQL 面试笔记解析直接爆砍 39K 月薪,拿走不谢
      基于Expression Lambda表达式树的通用复杂动态查询构建器——《构思篇二》已开源
    95. 原文地址:https://blog.csdn.net/YUJIANYUE/article/details/134367168