使用php从基于mysql值的csv文件中获取特定数据

时间:2011-03-04 22:36:23

标签: php mysql sql


所以这是设置:我需要从名为pricelist.csv的csv文件更新一些价格。数据库表名为products,并且有一个名为product_id的列,其中包含产品ID,它们也可以在csv文件的第一列中找到,而且最后我需要的是位于csv文件的第7列。我需要将这些内容写入我数据库的price列 我已尽力提出代码,但这对我的技能水平来说似乎太过分了。这就是我所做的:

<?php  
include("admin/include/db.php");  
$res=mysql_query("select * from products");  
$row = 1;  
$mycsvfile = array(); //define the main array.  
if (($handle = fopen("pricelist.csv", "r")) !== FALSE) {  
    while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
    {  
        $num = count($data);  
        $row++;  
        $mycsvfile[] = $data;  
    }  
    fclose($handle);  
}  

$row['product_id'] = $mycsvfile[$which_row][1] //trying to find the row in the csv  
$mycsvfile[$which_row][7] = $price; //should get price, but previous line does not work   

while($row=mysql_fetch_array($res))  
{  
    mysql_query("update products set price='".$price."', isavailable='1' where id='".$row['id']."'");  
}  
?>

欢迎任何形式的帮助!感谢

2 个答案:

答案 0 :(得分:0)

我认为你正在寻找这个(但我没有测试它):

<?php
include("admin/include/db.php");

if( ( $handle = fopen("pricelist.csv", "r") ) !== FALSE )
{
    while( ( $r = fgetcsv( $handle, 1000, ";") ) !== FALSE )
    {
        mysql_query('UPDATE products SET "price"="'.$r[6].'", "isavailable"="1" where "id"="'.$r[0].'"');  
    }
}

免责声明:是的我知道我没有清理数据,但我不想使用过时的mysql函数。

答案 1 :(得分:0)

您可以使用file()将CSV文件读入数组。然后使用str_getcsv()从文件数组中读取每个项目,并将其转换为一个代表CSV文件中一行的数组。然后,将该数组中的数据提取到更新查询中并运行它。

像这样:

$id = 0;
$price = 6;

$csv_file = file('pricelist.csv');

foreach($csv_file as $row)
{
    $data = str_getcsv($row);
    $query = "UPDATE products SET price = {$data[$price]}, isavailable='1' WHERE `id` = {$data[$id]}";
    //run the query
}