【发布时间】:2016-09-30 09:56:45
【问题描述】:
我有一个这样的 csv
product_id,stock_unit
1, ,
2, ,
3, ,
4, ,
5, ,
6, ,
现在,在我的 php 代码中,我将获取产品 ID 并对数据库运行查询以从数据库中获取库存单位。在获取产品的库存单位后,脚本应将其更新为 csv,而不更改任何名称。
所以我的代码是这样的
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
$file = "update_pd.csv";
$csv = array_map("str_getcsv", file($file,FILE_SKIP_EMPTY_LINES));
$keys = array_shift($csv);
$stock_array = array();
if (($handle = fopen($file, "r")) !== FALSE) {
fgetcsv($handle);
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$stock_array[] = get_data($data[0]);
}
fclose($handle);
}
//print_r($stock_array);
$handle = fopen("update_pd.csv", "a");
fputcsv($handle, $stock_array);
function get_data($id) {
if( !empty($id) ) {
$result = $mysqli->query("SELECT `stock_unit` FROM `products` WHERE `product_id` = ".$id." ");
if( $result ) {
while($row = $result->fetch_assoc()) {
return $row['stock_unit'];
}
}
}
}
这里是过度写入 csv 我的意思是数据在最后一行写入,所有旧数据都存在。该脚本应根据 csv 文件中的产品 id 写入库存数量,而不更改 csv 标题和文件名。那么有人可以告诉我该怎么做吗?任何帮助和建议都将是非常可观的。
更新
因为库存单位将从数据库中获取。输出应该是这样的
product_id,stock_unit
1, 24,
2, 22,
3, 37,
4, 46,
5, 89,
6, 96,
【问题讨论】:
-
你到底为什么要使用 CSV? mysql 做同样的事情,但堆得更好。
-
@e4c5 我的要求是这样的;)
-
我不明白你在做什么。请提供输出样本。另外,请说明您是要追加还是覆盖。
-
@Gordon 我只想获取那些产品 id 已在 csv 中提及的产品的库存单位,然后再次将库存单位写入同一个 csv。库存单位当前在数据库表中
-
所以你想覆盖旧的 csv?对吗?