MySQL Dump 파일 분석함수
parse_sql_dump 함수는 mysql 덤프파일의 내용을 분석해서, 배열로 추출합니다.
배열형태로 추출하므로, DB 변환과 같은 작업에서 유용하게 사용할 수 있을 것 같습니다(사실, 그 용도로 만들었던 겁니다. ^^)
/** * parse mysql dump sql * * created by 행복한고니 (gonom9@gmail.com) */ function parse_sql_dump($str) { $data = $cols = array(); $in_table = $in_quote = false; $lines = explode("\n", $str); foreach ($lines as $line) { $line = trim($line); if (!$line) continue; if (substr($line,0,2) == '--') continue; if ($in_table === false) { if (preg_match('/^CREATE TABLE `?([a-z0-9_]+)`?/i', $line, $match)) { $table = $match[1]; $data[$table] = array(); $cols[$table] = array(); $in_table = true; continue; } elseif (preg_match('/^INSERT INTO ([a-zA-Z0-9_]+) VALUES \(/i', $line, $match)) { $table = $match[1]; $line = substr($line, strlen($match[0])); preg_match_all('/\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\'|[0-9\.]+|NULL/i', $line, $match); $arr = array(); foreach ($match[0] as $key=>$value) { if (strtolower($value) == 'NULL') $value = 'NULL'; $arr[$cols[$table][$key]] = $value; } $data[$table][] = $arr; } } elseif ($in_table) { if ($line{0} == ')') { $in_table = false; continue; } if (preg_match('/`?([a-zA-Z0-9_]+)`? ((tiny|small|big)?int|(var)?char|date(time)?|time(stamp)?|enum|set|(tiny|medium|long)?(blob|text)|year|float|double)/i', $line, $match)) { $cols[$table][] = $match[1]; } continue; } } return $data; }
어떻게 나오는지는 직접 해보시기 바랍니다( 샘플 데이타 만들기 귀찮아서… ( -_-);; )
No comments yet.