我有一个文本文件,其中包含数据。它每行包含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 * FROM
和INSERT INTO
的组合来附加数据的文档,但我不理解它,似乎将预先存在的表附加到新表。我只想用新值更新当前表。
如何将新数据附加到现有表而不是替换它?
答案 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 . ";"
?>