>  기사  >  백엔드 개발  >  PHP에서 txt 파일을 읽어서 SQL을 구성하고 데이터베이스에 삽입하는 방법

PHP에서 txt 파일을 읽어서 SQL을 구성하고 데이터베이스에 삽입하는 방법

WBOY
WBOY원래의
2016-07-25 09:04:33972검색
  1. /**

  2. * $splitChar 필드 구분 기호
  3. * $file 데이터 파일 파일 이름
  4. * $table 데이터베이스 테이블 이름
  5. * $conn 데이터베이스 연결
  6. * $fields 데이터에 해당하는 열 이름
  7. * INSERT, REPLACE를 포함한 $insertType 삽입 작업 유형
  8. * 수집 및 정리: bbs.it-home.org
  9. */
  10. 함수 loadTxtDataIntoDatabase($splitChar,$file,$ table,$conn,$fields=array(),$insertType='INSERT'){
  11. if(empty($fields)) $head = "{$insertType} INTO `{$table}` VALUES('" ;
  12. else $head = "{$insertType} INTO `{$table}`(`".implode('`,`',$fields)."`) VALUES('"; //데이터 헤더
  13. $end = "')";
  14. $sqldata = Trim(file_get_contents($file));
  15. if(preg_replace('/s*/i','',$splitChar) == '') {
  16. $splitChar = '/(w )(s )/i';
  17. $replace = "$1','";
  18. $specialFunc = 'preg_replace';
  19. }else {
  20. $splitChar = $splitChar;
  21. $replace = "','";
  22. $specialFunc = 'str_replace';
  23. }
  24. //데이터 본문 처리 중 둘의 순서는 일치할 수 없습니다. 그렇지 않으면 공백이나 탭 구분 기호가 있게 됩니다.
  25. $sqldata = preg_replace('/(s*)(n )(s*)/i',''),('',$sqldata) //Replace newline
  26. $sqldata = $specialFunc($splitChar,$replace,$sqldata); //구분자 교체
  27. $query = $head.$sqldata.$end; //데이터 접합
  28. if(mysql_query( $query, $conn)) 반환 배열(true);
  29. else {
  30. 반환 배열(false,mysql_error($conn),mysql_errno($conn));
  31. }
  32. }
  33. //예제 1 호출
  34. require 'db.php';
  35. $splitChar = '|'; //세로 막대
  36. $file = 'sqldata1.txt';
  37. $fields = array(' id', 'parentid','name');
  38. $table = 'cengji';
  39. $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
  40. if (array_shift( $result)){
  41. echo '성공!
    ';
  42. }else {
  43. echo '실패!--오류:'.array_shift($result).'< ;br/ >';
  44. }
  45. /*sqlda ta1.txt
  46. |0|A
  47. |1|B
  48. |1|C
  49. |2|D
  50. -- cengji
  51. CREATE TABLE `cengji` (
  52. `id` int(11) NOT NULL AUTO_INCREMENT,
  53. `parentid` int(11) NOT NULL,
  54. `name` varchar(255) 기본 NULL,
  55. 기본 키(`id`),
  56. 고유 키 `parentid_name_unique`(`parentid`,`name`) BTREE 사용
  57. ) ENGINE=InnoDB AUTO_INCREMENT=1602 DEFAULT CHARSET=utf8
  58. */
  59. //호출 예시 2
  60. require 'db.php';
  61. $splitChar = ' '; //Space
  62. $file = 'sqldata2.txt';
  63. $fields = array(' id','make','model','year');
  64. $table = '자동차';
  65. $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$ 필드)
  66. if (array_shift($result)){
  67. echo '성공!
    ';
  68. }else {
  69. echo '실패!--오류:'.array_shift ($result ).'
    ';
  70. }
  71. /* sqldata2.txt
  72. Aston DB19 2009
  73. Aston DB29 2009
  74. Aston DB39 2009
  75. -- 자동차
  76. CREATE TABLE `cars` (
  77. `id` int(11) NOT NULL AUTO_INCREMENT,
  78. `make` varchar(16) NOT NULL,
  79. `model` varchar(16) DEFAULT NULL,
  80. ` year` varchar(16) DEFAULT NULL,
  81. PRIMARY KEY (`id`)
  82. ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8
  83. */
  84. //호출 예시 3
  85. require 'db.php';
  86. $splitChar = ' '; //Tab
  87. $file = 'sqldata3.txt';
  88. $fields = array('id','make',' 모델', '연도');
  89. $table = '자동차';
  90. $insertType = 'REPLACE';
  91. $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields ,$insertType );
  92. if (array_shift($result)){
  93. echo '성공!
    ';
  94. }else {
  95. echo '실패!--오류:' .array_shift( $result).'
    ';
  96. }
  97. /* sqldata3.txt
  98. Aston DB19 2009
  99. Aston DB29 2009
  100. Aston DB39 2009
  101. * /
  102. //호출 예시 3
  103. require 'db.php';
  104. $splitChar = ' '; //Tab
  105. $file = 'sqldata3.txt';
  106. $fields = 배열 ('id','value');
  107. $table = 'notExist'; //테이블이 존재하지 않습니다
  108. $result = loadTxtDataIntoDatabase($splitChar,$file,$table,$conn,$fields);
  109. if (array_shift($result)){
  110. echo '성공!
    ';
  111. }else {
  112. echo '실패!--오류:'.array_shift($result ).'< ;br/>';
  113. }

  114. //Attachment: db.php

  115. /* //이 줄을 주석 처리하여 모두 해제합니다
  116. ?>
  117. static $connect = null;
  118. static $table = 'jilian';
  119. if(!isset($connect)) {
  120. $connect = mysql_connect ("localhost" ,"root","");
  121. if(!$connect) {
  122. $connect = mysql_connect("localhost","Zjmainstay","");
  123. }
  124. if(!$ connect) {
  125. die('데이터베이스에 연결할 수 없습니다. /test/db.php에 의한 치명적인 오류 처리');
  126. }
  127. mysql_select_db("test",$connect);
  128. mysql_query( "SET NAMES utf8",$connect);
  129. $conn = &$connect;
  130. $db = &$connect;
  131. }
  132. ?>
코드 복사

코드 복사 코드는 다음과 같습니다.

  1. //*/

  2. 데이터 테이블 구조

  3. -- 데이터 테이블 구조:
  4. -- 100000_insert,1000000_insert
  5. CREATE TABLE `100000_insert` (
  6. `id` int(11) NOT NULL AUTO_INCREMENT ,
  7. `parentid` int(11) NOT NULL,
  8. `name` varchar(255) DEFAULT NULL,
  9. PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET= utf8
  11. 100000(100,000) 행 삽입: 100000_line_data 삽입 2.5534288883209초 사용
  12. 1000000(100만) 행 삽입: 1000000_line_data 삽입 19.677318811417초 사용
  13. //가능한 오류: 서버가 사라졌습니다
  14. // 해결 방법: my.ini/my.cnf max_allowed_packet=20M

코드 복사

저자: Zjmainstay


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.