2016-08-07 24 views
1

まず、テーブル内のすべてのデータを削除してから、新しいデータを挿入します。 Im .dbf foxプロテーブルをphpmyadminにインポートしています。しかし、問題は、データを再度インポートするときにデータが倍増することです。誰かが私を助けることができるこれを達成するために?テーブル内のすべてのデータを削除する方法

ここに私のコードです。

<?php 

include "config.sample.php";   // please copy the config.sample.php and edit the correct fields 

include "classes/XBase/Table.php"; 
include "classes/XBase/Column.php"; 
include "classes/XBase/Record.php"; 
include "classes/DBFhandler.php"; 

use XBase\Table; 

// Initializing vars 
ini_set('memory_limit', '2048M'); 
set_time_limit(0); 

$time_start = time(); 
$files = scandir($xbase_dir) or die ("Error! Could not open directory '$xbase_dir'."); 
$conn = new mysqli($db_host, $db_uname, $db_passwd, $db_name) or die ("Error connecting to mysql $mysqli->connect_error"); 

foreach ($files as $file) { 
    switch ($file) { 
    case (preg_match("/dbf$/i", $file) ? true : false): 
    print_r("DBF: $file\n"); 
    dbftomysql($file); 
    break; 
    default: 
    print_r("Other file: $file\n"); 
    } 

} 
$time_end = time(); 
"\n\nImport finished! Time spent: ". round(($time_end - $time_start)/60, 2) ." minutes\n"; 

function dbftomysql($file) { 
    // Path to dbase file 
    global $xbase_dir; 
    global $conn; 
    global $die_on_mysql_error; 

    $db_path = sprintf("%s/%s",$xbase_dir,$file); 
    // Open dbase file 
    $table = new Table($db_path); 
    $tbl = substr($file,0,strlen($file)-4); 
    print_r ("$tbl"); 
    $line = array(); 

    foreach ($table->getColumns() as $column) { 
     print_r("\t$column->name ($column->type/$column->length)\n"); 
     switch($column->type) { 
      case 'C': // Character field 
       $line[]= "`$column->name` VARCHAR($column->length)"; 
       break; 
      case 'F': // Floating Point 
       $line[]= "`$column->name` FLOAT"; 
       break; 
      case 'N': // Numeric 
       $line[]= "`$column->name` INT"; 
       break; 
      case 'L': // Logical - ? Y y N n T t F f (? when not initialized). 
       $line[]= "`$column->name` TINYINT"; 
       break; 
      case 'D': // Date 
       $line[]= "`$column->name` DATE"; 
       break; 
      case 'T': // DateTime 
       $line[]= "`$column->name` DATETIME"; 
       break; 
      case 'M': // Memo type field 
      default: 
       $line[]= "`$column->name` TEXT"; 
       break; 
     } 
    } 

    $str = implode(",",$line); 
    $sql = "CREATE TABLE IF NOT EXISTS `$tbl` ($str);"; 

    if ($conn->query("$sql") === TRUE) { 
     echo "Table $tbl successfully created\n"; 
    } else { 
     echo "Error SQL: ".$conn->error ." >> $sql \n"; 
     if ($die_on_mysql_error) { 
      die; 
     } 
    } 

    $table->close(); 

    // Import using dbf + fpt files (for MEMO data...) 
    $fpt_file = str_replace('.dbf', '.fpt', $db_path); 
    $fpt_path = (file_exists($fpt_file) ? $fpt_file : ''); 
    import_dbf_to_mysql($tbl, $db_path, $fpt_path); 
// import_dbf($db_path, $tbl); 
} 

function import_dbf($db_path, $tbl) { 
    global $conn; 
    global $die_on_mysql_error; 
    // print_r ("$db_path\n"); 
    $table = new Table($db_path); 

    print_r ("$table->recordCount\n"); 
    print_r (sizeof($table->columns)); 
    $i = 0; 
    while ($record=$table->nextRecord()) { 
     $fields = array(); 
     $line = array(); 
     foreach ($record->getColumns() as $column) { 
      $fields[]=$column->name; 
      // print_r("$column->name\n"); 
      switch($column->type) { 
       case 'C': // Character field 
       case 'M': // Memo type field 
        $line[]= sprintf("'%s'", $record->getObject($column)); 
        break; 
       case 'F': // Floating Point 
        $line[]=sprintf("%7.2f", $record->getObject($column)); 
        break; 
       case 'N': // Numeric 
        $line[]=sprintf("%d", $record->getObject($column)); 
        break; 
       case 'L': // Logical - ? Y y N n T t F f (? when not initialized). 
        // $line[] = sprintf("%d", ($record->getBoolean($column) ? 1 : 0)); 
        $line[] = sprintf("%d", $record->getString($column->name)); 
        break; 
       case 'T': // DateTime 
       case 'D': // Date 
        $line[]= sprintf("'%s'", strftime("%Y-%m-%d %H:%M", $record->getObject($column))); 
        break; 
      } 
     } 

     $val = implode(",",$line); 
     $col = implode(",",$fields); 

     if($GLOBALS['from_encoding']!="")$val = mb_convert_encoding($val, 'UTF-8', $GLOBALS['from_encoding']); 

     $sql = "INSERT INTO `$tbl` ($col) VALUES ($val)\n"; 
     // print_r ("$sql"); 
     if ($conn->query("$sql") === TRUE) { 
      $i++; 
      if ($i % 100 == 0) { 
       echo "$i records inserted in $tbl\n"; 
      } 
      die; 
     } else { 
      echo "Error SQL: ".$conn->error ." >> $sql \n"; 
      if ($die_on_mysql_error) { 
       die; 
      } 
     } 
    } 
    $table->close(); 
    echo "Table $tbl imported\n"; 

} 

function import_dbf_to_mysql($table, $dbf_path, $fpt_path) { 
    echo "Initializing import: Table $table\n"; 
    global $conn; 
    global $die_on_mysql_error; 
    $i = 0; 
    $Test = new DBFhandler($dbf_path, $fpt_path); 
    while (($Record = $Test->GetNextRecord(true)) and ! empty($Record)) { 
     $a = 0; 
     $sql1 = "INSERT INTO `$table` ("; 
     $sql2 = ") values ("; 
     $sql = ""; 
     foreach ($Record as $key => $val) { 
      $key = (strpos($key, 0x00) !== false) ? substr($key, 0, strpos($key, 0x00)) : $key; 

      if ($val == '{BINARY_PICTURE}') { 
       continue; 
      } 
      $val = str_replace("'", "", $val); 
      if($GLOBALS['from_encoding']!="")$val = mb_convert_encoding($val, 'UTF-8', $GLOBALS['from_encoding']); 
      $a = $a + 1; 
      if ($a == 1) { 
       $sql1 .="`$key`"; 
       $sql2 .="'" . trim($val) . "'"; 
      } else { 
       $sql1 .=",`$key`"; 
       $sql2 .=",'$val'"; 
      } 
     } 
     $sql = "$sql1 $sql2)"; 
     if ($conn->query("$sql") === TRUE) { 
      $i++; 
      if ($i % 100 == 0) { 
       echo "."; 
      } 
     } else { 
      echo "Error SQL: ".$conn->error ." >> $sql \n"; 
      if ($die_on_mysql_error) { 
       die; 
      } 
     } 
    } 

    echo "Table $table imported\n"; 

} 
+2

を機能させる$sql = "TRUNCATE TABLE $tbl";mysqli_query($conn, $sql);を置くことによってそれを解決し 'tablename'を切り捨てる - – RamRaider

+1

(1〜想定し、自動インクリメントがある場合)テーブルをクリアし、主キーをリセットしますそれはあなたが私たちに示している多くのコードです。関連するパーツに絞ることができますか?>切り捨てを表示してインポートしますか? – Philipp

+0

どこに置くべきかわかりません。私は '$ sql1 =" TRUNCATE TABLE '$ tbl'"; "を置く場所をすべて試しましたが、動作しませんでした。 – nethken

答えて

0

は私がdbftomysql

function dbftomysql($file) { 
    // Path to dbase file 
    global $xbase_dir; 
    global $conn; 
    global $die_on_mysql_error; 

    $db_path = sprintf("%s/%s",$xbase_dir,$file); 
    // Open dbase file 
    $table = new Table($db_path); 
    $tbl = substr($file,0,strlen($file)-4); 
    print_r ("$tbl"); 
    $line = array(); 


    foreach ($table->getColumns() as $column) { 
     print_r("\t$column->name ($column->type/$column->length)\n"); 
     switch($column->type) { 
      case 'C': // Character field 
       $line[]= "`$column->name` VARCHAR($column->length)"; 
       break; 
      case 'F': // Floating Point 
       $line[]= "`$column->name` FLOAT"; 
       break; 
      case 'N': // Numeric 
       $line[]= "`$column->name` INT"; 
       break; 
      case 'L': // Logical - ? Y y N n T t F f (? when not initialized). 
       $line[]= "`$column->name` TINYINT"; 
       break; 
      case 'D': // Date 
       $line[]= "`$column->name` DATE"; 
       break; 
      case 'T': // DateTime 
       $line[]= "`$column->name` DATETIME"; 
       break; 
      case 'M': // Memo type field 
      default: 
       $line[]= "`$column->name` TEXT"; 
       break; 
     } 
    } 

    $str = implode(",",$line); 
    $sql = "CREATE TABLE IF NOT EXISTS `$tbl` ($str);"; 

    if ($conn->query("$sql") === TRUE) { 
     echo "Table $tbl successfully created\n"; 
    } else { 
     echo "Error SQL: ".$conn->error ." >> $sql \n"; 
     if ($die_on_mysql_error) { 
      die; 
     } 
    } 

    $sql = "TRUNCATE TABLE $tbl"; 
    mysqli_query($conn, $sql); 
    $table->close(); 

    // Import using dbf + fpt files (for MEMO data...) 
    $fpt_file = str_replace('.dbf', '.fpt', $db_path); 
    $fpt_path = (file_exists($fpt_file) ? $fpt_file : ''); 
    import_dbf_to_mysql($tbl, $db_path, $fpt_path); 
// import_dbf($db_path, $tbl); 
} 
関連する問題