在这里,我想从文本文件中获取记录,然后插入到 mysql 数据库中。 我得到的结果是空白。 那么,我的代码是对还是错?
$local_csvfile_path = $_SERVER['DOCUMENT_ROOT'] . '/test_demo/magento_prd';
$filename = $local_csvfile_path . "/orderitems100081669.txt";
if ($dh = opendir($local_csvfile_path)) {
$cnt = 0;
while (($lfile = readdir($dh)) !== false) {
if ($lfile != "." && $lfile != ".." && $lfile != basename($_SERVER["SCRIPT_FILENAME"])) {
$file = fopen($filename, "r");
if ($file) {
$size = filesize($filename);
if ($size) {
$csvcontent = fread($file, $size);
fclose($file);
$output = explode("\n", $csvcontent);
foreach($output as $line)
{
$var = explode('\t', $line, 2);
$arr[$var[0]] = $var[1];
}
print_r($arr);
$sql = mysql_query('INSERT INTO tbl_order_details(orderdet_id) VALUES ("'.$arr.'")');
}
} else {
fclose($file);
}
}
}
}
还有我的文本文件代码:
order_id orderdet_productsku orderdet_iscase orderdet_qty item_sold_price
100081669 BS8FTX1 N 1 2.99
最佳答案
发生的情况是您将每一行都保存在一个数组中,但没有将每个数组元素保存在数据库中。您可以为 foreach 中的每一行运行一个查询,或者像我一样将数组元素连接起来以形成一个包含许多值的完整 INSERT。
foreach($output as $line)
{
$var = explode('\t', $line, 2);
$arr[$var[0]] = $var[1];
}
print_r($arr);
$sql = mysql_query('INSERT INTO tbl_order_details(orderdet_id) VALUES ("'.implode('),(',$arr).'")');
基本上,内爆将在每个元素之间添加 ),(
。因此,如果存储的值为 5 和 6,则形成 VALUES(5),(6)
。
您可能想再次使用它,因为我看到您将第一列存储为键,将第二列存储为值,但不要说明您希望每一列的用途。所以这个当前查询将只使用这些值。
编辑:
为了让事情更容易开始,以便您可以测试,请改用此代码,它将一行一行地插入行,并使首先尝试更容易。但请注意,运行 X 查询比只运行一个查询要慢(但不会太多,取决于数量)。
foreach($output as $line)
{
$var = explode('\t', $line, 2);
$arr[$var[0]] = $var[1];
$sql = mysql_query('INSERT INTO tbl_order_details(orderdet_id) VALUES ("'.$var[1].'")');
}
print_r($arr);
关于php - 从文本文件读取然后插入 mysql 时结果变为空白,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34084747/