>백엔드 개발 >PHP 튜토리얼 >php sql 파일 가져오기 클래스(예)

php sql 파일 가져오기 클래스(예)

WBOY
WBOY원래의
2016-07-25 08:55:00894검색
  1. class DBManager
  2. {
  3. var $dbHost = '';
  4. var $dbUser = '';
  5. var $dbPassword = '';
  6. var $dbSchema = '';
  7. function __construct($host,$user,$password,$schema)
  8. {
  9. $this-> ;dbHost = $host;
  10. $this->dbUser = $user;
  11. $this->dbPassword = $password;
  12. $this->dbSchema = $schema;
  13. }
  14. 함수 createFromFile($sqlPath,$delimiter = '(;n)|((;rn))|(;r)',$prefix = '',$commenter = array('#','- -'))
  15. {
  16. //파일 존재 여부 확인
  17. if(!file_exists($sqlPath))
  18. return false;
  19. $handle = fopen($sqlPath, ' rb');
  20. $sqlStr = fread($handle,filesize($sqlPath));
  21. //SQL 구문의 문 구분 기호를 통해 분할
  22. $segment =explore( ";",trim($sqlStr));
  23. //var_dump($segment);
  24. //주석 및 추가 빈 줄 제거
  25. foreach($segment as & $ 문 )
  26. {
  27. $sentence =Explode("n",$statement);
  28. $newStatement = array();
  29. foreach($sentence를 $subSentence로)
  30. {
  31. if('' != Trim($subSentence))
  32. {
  33. //댓글인지 판단
  34. $isComment = false;
  35. foreach($commenter as $ Comer )
  36. {
  37. if(eregi("^(".$comer.")",trim($subSentence)))
  38. {
  39. $isComment = true;
  40. break;
  41. }
  42. }
  43. //주석이 아니면 SQL 문으로 간주합니다.
  44. if(!$isComment)
  45. $newStatement[] = $subSentence
  46. }
  47. }
  48. $statement = $newStatement;
  49. }
  50. //테이블 이름에 접두사 추가
  51. if('' != $prefix)
  52. {
  53. //테이블 이름이 첫 번째 행에 나타날 때만 유효합니다. 예: CREATE TABLE talbeName
  54. $regxTable = "^[`'"]{0,1}[_a-zA -Z] [_a-zA- Z0-9]*[`'"]{0,1}$";//테이블 이름 처리를 위한 정규식
  55. $regxLeftWall = "^[`'"]다음을 포함하는 보트 Leaves";
  56. $sqlFlagTree = array(
  57. "CREATE" => array(
  58. "TABLE" => array(
  59. "$regxTable" => 0
  60. )
  61. ),
  62. "INSERT" => array(
  63. "INTO" => array(
  64. "$regxTable" => 0
  65. )
  66. )
  67. );
  68. foreach($segment as & $statement)
  69. {
  70. $tokens = Split(" ",$statement[0]);
  71. $tableName = array();
  72. $this->findTableName($sqlFlagTree,$tokens,0,$tableName);
  73. if(empty($tableName['leftWall']))
  74. {
  75. $newTableName = $prefix .$tableName['name'];
  76. }
  77. else{
  78. $newTableName = $tableName['leftWall'].$prefix.substr($tableName['name) '],1);
  79. }
  80. $statement[0] = str_replace($tableName['name'],$newTableName,$statement[0]);
  81. }
  82. }
  83. // SQL 문 결합
  84. foreach($segment as & $statement)
  85. {
  86. $newStmt = '';
  87. foreach($statement as $sentence)
  88. {
  89. $newStmt = $ newStmt.trim($sentence)."n";
  90. }
  91. $statement = $newStmt;
  92. }
  93. self::saveByQuery($segment );
  94. true를 반환합니다.
  95. }
  96. 개인 함수 saveByQuery($sqlArray)
  97. {
  98. $conn = mysql_connect($this->dbHost,$this- >dbUser,$this-> ;dbPassword);
  99. mysql_select_db($this->dbSchema);
  100. foreach($sqlArray as $sql)
  101. {
  102. mysql_query ("set names utf8"); //문자 집합 선언
  103. mysql_query($sql);
  104. }
  105. mysql_close($conn);
  106. }
  107. 비공개 함수 findTableName($sqlFlagTree,$tokens,$tokensKey=0,& $tableName = array())
  108. {
  109. $regxLeftWall = "^[`'"]一叶扁舟" ;
  110. if(count($tokens)<=$tokensKey)
  111. return false
  112. if('' == Trim($tokens[$tokensKey]))
  113. {
  114. return self::findTableName($sqlFlagTree,$tokens,$tokensKey 1,$tableName);
  115. }
  116. else
  117. {
  118. foreach($sqlFlagTree as $flag => $v)
  119. {
  120. if(eregi($flag,$tokens[$tokensKey]))
  121. {
  122. if(0==$v)
  123. {
  124. $tableName[ 'name'] = $tokens[$tokensKey];
  125. if(eregi($regxLeftWall,$tableName['name']))
  126. {
  127. $tableName['leftWall'] = $ tableName['name']{0};
  128. }
  129. return true;
  130. }
  131. else{
  132. return self::findTableName($v,$tokens,$tokensKey 1 ,& $tableName);
  133. }
  134. }
  135. }
  136. }
  137. return false;
  138. }
  139. }
  140. function writeArrayToFile($fileName,$dataArray ,$delimiter="rn")
  141. {
  142. $handle=fopen($fileName, "wb");
  143. $text = '';
  144. foreach($dataArray $data로)
  145. {
  146. $text = $text.$data.$delimiter;
  147. }
  148. fwrite($handle,$text);
  149. }
复제대码

2,调사용방법:

  1. $dbM = new DBManager('localhost','root','root','6639');
  2. $dbM->createFromFile ('data.sql',null,'');
复代码


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