如何在SQL中追加而不是替换INSERT值

时间:2017-07-17 04:05:50

标签: mysql sql

我有一个文本文件,其中包含数据。它每行包含3列数据,每列用逗号分隔。我正在尝试从这个文件创建一个数据库,但只保存最后一行。

示例文件:

Something,More,7
Another,Thing,9
One,Extra,3

脚本:

<?php
$myFile = file('data.txt');

    foreach ($myFile as $row){
        list($a,$b,$c) = explode(',', $row);
        $insertStmt = "INSERT INTO `MYTABLE` (`id`, `a`, `b`, `c`)" . PHP_EOL
                    . "  VALUES (NULL, '$a', '$b', $c);";
    }
?>

当我'SELECT * FROM `MYTABLE`;'时,只显示最后提交的值(One Extra 3)。我希望它能够保存行中的所有数据值。我看到有关使用SELECT * FROMINSERT INTO的组合来附加数据的文档,但我不理解它,似乎将预先存在的表附加到新表。我只想用新值更新当前表。

如何将新数据附加到现有表而不是替换它?

1 个答案:

答案 0 :(得分:1)

您的脚本循环遍历文件,并在每个循环中重新定义变量$insertStmt。这是适得其反的,你需要在每个循环上附加它。这样的事情会更好。

<?php
$myFile     = file('data.txt');
$insertStmt = "";
$i          = 0;


    foreach ($myFile as $row) {
        list($a,$b,$c) = explode(',', $row);

        if( $i == 0 )
            $insertStmt = $insertStmt . "INSERT INTO `MYTABLE` (`id`, `a`, `b`, `c`) VALUES ";
        else 
            $insertStmt = $insertStmt . "(NULL, '$a', '$b', $c),";

        $i++;
    }

        $insertStmt = rtrim($insertStmt, ",");
        $insertStmt = $insertStmt . ";"
?>