代码如下:
$host = '';
$username = '';
$password = '';
$database = '';
$con = new mysqli($host,$username,$password,$database);
if ($con->connect_error)
{
die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
$di = new RecursiveDirectoryIterator('/var/www/html/cdr');
foreach (new RecursiveIteratorIterator($di) as $filename => $file)
{
if ($filename == "/var/www/html/cdr/.")
{
}
else
{
$con->query("LOAD DATA INFILE '" . $filename . "'
INTO TABLE cdr
FIELDS TERMINATED BY ','
ENCLOSED BY ''"'
LINES TERMINATED BY ''n'
IGNORE 1 LINES"
);
echo $filename . " added to Database and deleted";
echo "<br />";
unlink($filename);
}
}
当前代码按预期工作。它遍历csv文件目录,并将每个文件导入数据库。
我想做的是添加一个额外的列,标题为"文件名"的数据库与文件名,每条记录来自。
是否有一种方法可以修改MySQL查询以在每行末尾添加指定的列数据,其中$filename为数据?
谢谢。
更新
下面是更新后的代码。
$di = new RecursiveDirectoryIterator('/var/www/html/cdr');
foreach (new RecursiveIteratorIterator($di) as $filename => $file)
{
$fileName = $filename;
if ($fileName == "/var/www/html/cdr/.")
{
} else {
$con->query("LOAD DATA INFILE '" . $fileName . "'
INTO TABLE cdr
FIELDS TERMINATED BY ','
ENCLOSED BY ''"'
LINES TERMINATED BY ''n'
IGNORE 1 LINES
SET filename = '" . $fileName . "'"
);
echo $fileName . " added to Database and deleted";
echo "<br />";
unlink($fileName);
}
}
就像在查询的末尾添加SET columnName = columnEntry一样简单。
你可以试试:
$sql = "LOAD DATA INFILE '" . $filename . "'
INTO TABLE cdr
FIELDS TERMINATED BY ','
ENCLOSED BY ''"'
LINES TERMINATED BY ''n'
IGNORE 1 LINES
(`col2`,`col3`, `colX`)
SET filenameColumnName='{$filename}'";
甚至没有列列表:
$sql = "LOAD DATA INFILE '" . $filename . "'
INTO TABLE cdr
FIELDS TERMINATED BY ','
ENCLOSED BY ''"'
LINES TERMINATED BY ''n'
IGNORE 1 LINES
SET filenameColumnName='{$filename}'";
MySQL文档中有这样的例子:
http://dev.mysql.com/doc/refman/5.1/en/load-data.html 注意:你可能应该在查询中使用数据绑定,而不是直接包含$filename