2014-09-20 45 views
0

嗨,你可以看到我有这个PHP脚本:截断表中所有MySQL列除了第一

<?php 
    $databasehost = "localhost"; 
    $databasename = ""; 
    $databasetable = ""; 
    $databaseusername=""; 
    $databasepassword = ""; 
    $fieldseparator = ","; 
    $lineseparator = "\n"; 
    $enclosedbyquote = '"'; 
    $csvfile = "file.csv"; 

    if(!file_exists($csvfile)) { 
     die("File not found. Make sure you specified the correct path."); 
    } 

    try { 
     $pdo = new PDO("mysql:host=$databasehost;dbname=$databasename", 
      $databaseusername, $databasepassword, 
      array(
       PDO::MYSQL_ATTR_LOCAL_INFILE => true, 
       PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION 
      ) 
     ); 
    } catch (PDOException $e) { 
     die("database connection failed: ".$e->getMessage()); 
    } 

    $pdo->exec("TRUNCATE TABLE `$databasetable`"); 

     $affectedRows = $pdo->exec(" 
     LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." REPLACE INTO TABLE `$databasetable` 
     FIELDS OPTIONALLY ENCLOSED BY ".$pdo->quote($enclosedbyquote)." 
     TERMINATED BY ".$pdo->quote($fieldseparator)." 
     LINES TERMINATED BY ".$pdo->quote($lineseparator)." 
     IGNORE 1 LINES"); 

    echo "Loaded a total of $affectedRows records from this csv file.\n"; 

    ?> 

现在你可以看到这是CSV文件导入到我的数据库和截断整SQL表。

我的问题是如何阻止表的第一列受到导入的影响?我将使用第一列作为ID,任何想法我怎么能做到这一点?

谢谢

回答

0

简单。而不是:

TRUNCATE TABLE `$databasetable` 

使用:

UPDATE `$databasetable` SET colB = '', colC = '', colD = '', colE = ''; 

其中可乐要保留列。如果使用NULL字段,请更改为:

UPDATE `$databasetable` SET colB = NULL; #etc.