GORAGOD.com

freelance, web developer, web designer, hosting, domain name

ถามเรื่องการImportไฟล์ .sql เข้า MySQL โดยใช้ PHP

คือผมต้องเขียนระบบแบคอัพไฟล์คับ โดยตอนนี้ backup ออกมาเป็นไฟล์ .sql ได้แล้ว
เหลือแต่เขียนให้มัน import กลับเข้า BD ได้ ซึ่งทำไม่ได้ซักทีครับ ผมเลยอยากขอความช่วยเหลือหน่อยครับผม

ผมเขียนระบบ import ไว้แบบนี้อ่ะคับ

Code (PHP)


<?
//this is the file you are loading your tables from
  $file = fopen($_POST["bgUp"] , "rb");
  $line_count = load_backup_sql($file);
  fclose($file);
  echo "lines read: ".$line_count;

  function load_backup_sql($file) {
    $line_count = 0;
    $db_connection = db_connect();
    mysql_select_db (db_name()) or exit();
    $line_count = 0;
    while (!feof($file)) {
      $query = NULL;
      while (!feof($file)) {
        $query .= fgets($file);
      }
      if (NULL != $query) {
        $line_count++;
        mysql_query($query) or die("sql not successful: ".mysql_error()." query: ".$query);
      }
    } 
    return $line_count;
  }
 
  function db_name() {
      return ("edocs");
  }
 
  function db_connect() {
    $db_connection = mysql_connect("localhost", "root", "1234");
    return $db_connection;
  }
  ?>
 
CREATE DATABASE `edocs` DEFAULT CHARACTER SET tis620 COLLATE tis620_thai_ci; USE `edocs`; CREATE TABLE `action` ( `Id` int(11) NOT NULL auto_increment,`list` int(4) NOT NULL,`action_code` char(5) default NULL,`action_name` varchar(255) default NULL, PRIMARY KEY (`Id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620 AUTO_INCREMENT=38 ;CREATE TABLE `comp` ( `comp_id` int(3) NOT NULL,`comp_name` varchar(6) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `department` (`dept_id` int(3) NOT NULL,`dept_code` int(3) NOT NULL,`dept_name` varchar(100) NOT NULL,PRIMARY KEY (`dept_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `division` (`Id` int(11) NOT NULL auto_increment,`list` int(4) NOT NULL,`division_code` char(5) default NULL,`division_name` varchar(255) default NULL,PRIMARY KEY (`Id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620 AUTO_INCREMENT=38 ;CREATE TABLE `document` (`doc_id` int(8) NOT NULL,`doc_tmpid` int(8) NOT NULL,`doc_code` varchar(25) NOT NULL,`subject_code` varchar(5) NOT NULL,`doc_subject` varchar(255) NOT NULL,`file1` varchar(8) NOT NULL,`dated` date NOT NULL default '0000-00-00',`from1` varchar(100) NOT NULL,`to1` varchar(100) NOT NULL,`day_in` date NOT NULL default '0000-00-00',`ref` varchar(100) NOT NULL,`subject` varchar(8) NOT NULL,`rsub` varchar(2) NOT NULL,`title` varchar(255) NOT NULL,`action` varchar(100) NOT NULL,`cir` varchar(100) NOT NULL,`fax_d` date NOT NULL default '0000-00-00',`cir_d` date NOT NULL default '0000-00-00',`ref_out` varchar(100) NOT NULL,`date_out` date NOT NULL default '0000-00-00',`date_due` date NOT NULL default '0000-00-00',`kpi_date` date NOT NULL default '0000-00-00',`status` varchar(2) NOT NULL,`status_date` date NOT NULL default '0000-00-00',`doc_file1` varchar(100) NOT NULL,`doc_file2` varchar(100) NOT NULL,`doc_file3` varchar(100) NOT NULL,`ps` text NOT NULL,`doc_accept` char(1) NOT NULL,`date_rec` date NOT NULL default '0000-00-00',`insert_by` varchar(100) NOT NULL,`insert_date` datetime NOT NULL default '0000-00-00 00:00:00',PRIMARY KEY (`doc_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `document_tmp` (`doc_id` int(8) NOT NULL,`doc_tmpid` int(8) NOT NULL,`doc_code` varchar(25) NOT NULL,`subject_code` varchar(5) NOT NULL,`doc_subject` varchar(255) NOT NULL,`file1` varchar(8) NOT NULL,`dated` date NOT NULL default '0000-00-00',`from1` varchar(100) NOT NULL,`to1` varchar(100) NOT NULL,`day_in` date NOT NULL default '0000-00-00',`ref` varchar(100) NOT NULL,`subject` varchar(8) NOT NULL,`rsub` varchar(2) NOT NULL,`title` varchar(255) NOT NULL,`action` varchar(100) NOT NULL,`cir` varchar(100) NOT NULL,`fax_d` date NOT NULL default '0000-00-00',`cir_d` date NOT NULL default '0000-00-00',`ref_out` varchar(100) NOT NULL,`date_out` date NOT NULL default '0000-00-00',`date_due` date NOT NULL default '0000-00-00',`kpi_date` date NOT NULL default '0000-00-00',`status` varchar(2) NOT NULL,`doc_file1` varchar(100) NOT NULL,`doc_file2` varchar(100) NOT NULL,`doc_file3` varchar(100) NOT NULL,`ps` text NOT NULL,`doc_accept` char(1) NOT NULL,`date_rec` date NOT NULL default '0000-00-00',`add_status` varchar(10) NOT NULL,`insert_by` varchar(100) NOT NULL,`insert_date` datetime NOT NULL default '0000-00-00 00:00:00',PRIMARY KEY (`doc_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `documentout` (`doco_id` int(8) NOT NULL,`doco_Tmpid` int(8) NOT NULL,`doc_date` date NOT NULL default '0000-00-00',`doc_from` varchar(100) NOT NULL,`doc_to` varchar(100) NOT NULL,`date_out` date NOT NULL default '0000-00-00',`date_receive` date NOT NULL default '0000-00-00',`ref` varchar(8) NOT NULL,`ref2` varchar(5) NOT NULL,`ref3` varchar(5) NOT NULL,`ref4` varchar(10) NOT NULL,`rsub` varchar(2) NOT NULL,`totalref` varchar(100) NOT NULL,`title` text NOT NULL,`date_req` date default '0000-00-00',`requester` varchar(20) NOT NULL,`cir` varchar(100) NOT NULL,`date_rec` date NOT NULL default '0000-00-00',`ref_in` varchar(100) NOT NULL,`doc_file1` varchar(100) NOT NULL,`doc_file2` varchar(100) NOT NULL,`doc_file3` varchar(100) NOT NULL,`ps` text NOT NULL,`doc_accept` char(2) NOT NULL,`insert_by` varchar(100) NOT NULL,`insert_date` datetime NOT NULL default '0000-00-00 00:00:00',PRIMARY KEY (`doco_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `documentout_tmp` (`doco_id` int(8) NOT NULL,`doco_Tmpid` int(8) NOT NULL,`doc_date` date NOT NULL default '0000-00-00',`doc_from` varchar(100) NOT NULL,`doc_to` varchar(100) NOT NULL,`date_out` date NOT NULL default '0000-00-00',`date_receive` date NOT NULL default '0000-00-00',`ref` varchar(8) NOT NULL,`ref2` varchar(5) NOT NULL,`ref3` varchar(5) NOT NULL,`ref4` varchar(10) NOT NULL,`rsub` varchar(2) NOT NULL,`totalref` varchar(50) NOT NULL,`title` text NOT NULL,`date_req` date default '0000-00-00',`requester` varchar(20) NOT NULL,`cir` varchar(100) NOT NULL,`date_rec` date NOT NULL default '0000-00-00',`ref_in` varchar(100) NOT NULL,`doc_file1` varchar(100) NOT NULL,`doc_file2` varchar(100) NOT NULL,`doc_file3` varchar(100) NOT NULL,`ps` text NOT NULL,`doc_accept` char(2) NOT NULL,`add_status` varchar(20) NOT NULL,`insert_by` varchar(100) NOT NULL,`insert_date` datetime NOT NULL default '0000-00-00 00:00:00',PRIMARY KEY (`doco_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `employee` (`id` int(5) NOT NULL auto_increment,`emp_id` int(5) NOT NULL,`emp_name` varchar(100) NOT NULL,`emp_email` varchar(100) NOT NULL,`emp_div` int(3) NOT NULL,`emp_dept` int(3) NOT NULL,`emp_user` varchar(30) NOT NULL,`emp_password` varchar(8) NOT NULL,`emp_role` int(2) NOT NULL,`emp_comp` int(2) NOT NULL,`emp_status` char(1) NOT NULL,`insert_by` varchar(100) NOT NULL,`insert_date` date NOT NULL default '0000-00-00',PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620 AUTO_INCREMENT=7 ;CREATE TABLE `role` (`role_id` int(3) NOT NULL,`role_name` varchar(50) NOT NULL,PRIMARY KEY (`role_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `statusfor` (`status_id` int(5) NOT NULL,`status_code` varchar(5) NOT NULL,`status_detail` varchar(50) NOT NULL,PRIMARY KEY (`status_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620;CREATE TABLE `subject` (`subject_id` int(5) NOT NULL,`subject_code` varchar(5) NOT NULL,`subject_detail` varchar(255) NOT NULL,PRIMARY KEY (`subject_id`)) ENGINE=MyISAM DEFAULT CHARSET=tis620; USE `edocs`; INSERT INTO action VALUES('1', '11', '80', 'สำนักกรรมการผู้จัดการ');INSERT INTO action VALUES('2', '12', '90', 'สำนักตรวจสอบภายใน');INSERT INTO action VALUES('3', '5', '10', 'ฝ่ายบริหารทั่วไป');INSERT INTO action VALUES('4', '6', '20', 'ฝ่ายการเงิน');INSERT INTO action VALUES('5', '7', '30', 'ฝ่ายรายได้ค่าผ่านทาง');INSERT INTO action VALUES('6', '8', '40', 'ฝ่ายก่อสร้างและบำรุงรักษา');INSERT INTO action VALUES('7', '9', '60', 'ฝ่ายวางแผนและพัฒนา');INSERT INTO action VALUES('8', '10', '70', 'ฝ่ายการจราจร');INSERT INTO action VALUES('9', '1', 'MD', 'MD');INSERT INTO action VALUES('10', '2', 'AMD1', 'AMD1');INSERT INTO action VALUES('11', '3', 'AMD2', 'AMD2');INSERT INTO action VALUES('12', '4', 'AMD3', 'AMD3');INSERT INTO action VALUES('13', '13', '40d', '40d');INSERT INTO action VALUES('14', '14', '60d', '60d');INSERT INTO comp VALUES('1', 'BECL');INSERT INTO comp VALUES('2', 'NECL').......(insert จนครบอะคับ เยอะมาก)


คือไม่รู้ว่าไฟล์ backup ปิด หรือผมเขียนให้มัน import ผิดอะครับ ช่วยหน่อยนะคับ
ขอบคุณคับ
 
20 พ.ค. 2552 2 13,768

เวลา import ให้ import ทีละคำสังครับ ถ้า import ทีเดียวทั้งไฟล์ บางทีอาจไม่ผ่านครับ

โดยปกติแล้วเท่าที่ผมเคยทำ ผมใช้วิธี export และ import ด้วยการเขียนโค้ดเองครับ โดยมีเงื่อนไขตอน export ว่า ให้ export ออกมา แต่ละ record เพียง 1 บรรทัดครับ ซึ่งจะทำให้ตอน import ทำได้ง่ายครับ เนื่องจากเวลาอ่าน อ่านออกมาทีละ บรรทัด ก็ queryได้เลย

ถ้า export ด้วย phpMyAdmin แล้ว import ด้วยเราเองละก็ ปวดหัวตายเลย
#1

CREATE DATABASE `edocs` .........NGINE=MyISAM DEFAULT CHARSET=tis620;
CREATE TABLE `division` (`Id` int(11) N..........ARSET=tis620 AUTO_INCREMENT=38 ;
INSERT INTO action VALUES('2', '12', '90', 'สำนักตรวจสอบภายใน');
INSERT INTO action VALUES('3', '5', '10', 'ฝ่ายบริหารทั่วไป');
INSERT INTO action VALUES('4', '6', '20', 'ฝ่ายการเงิน');
INSERT INTO action VALUES('5', '7', '30', 'ฝ่ายรายได้ค่าผ่านทาง');


ถ้าข้อมูลในไฟล์เป็นแบบนี้ก็ import ง่ายครับ อ่านมาทีละบรรทัดด้วย  file() แล้วก็เอาไป query ทีละบรรทัดเลยครับ
#2
ความคิดเห็น
ไฟล์อัปโหลด ชนิด jpg, jpeg ขนาดไฟล์ไม่เกิน 2M
^