使用perl将数据库的每一行保存为目录中的单独文本文件?

时间:2014-01-06 13:51:08

标签: mysql arrays database perl

我有一个数据库表,其中包含各种列和行数据。

  1. 我想在其中一列中搜索关键字。该栏名为“'产品”。
  2. 我想在表上为每个关键字运行查询,并返回包含关键字的所有行的结果。
  3. 每行的结果应该打印到一个单独的文件中,每个文件都应该将名称作为数据值包含该行的一列(在本例中为item_id)
  4. 我希望在循环中完成此操作,直到搜索到所有“product”列的所有行。

    我有以下代码打印到屏幕,但所有匹配的行和列立即在屏幕上返回i,e不单独按照我的意愿提交(请参阅上面的(3))。

    另请注意输出格式化,这就是我想要的方式,我是单独的行e.t.c

    任何人都可以帮忙吗?

    #!/usr/bin/perl
    use DBI;
    @product = qw( orange apple);   ###an array created for products 
    $count = 1;
    
    # Connect to the database
    details not provided
    
      my $dbh = DBI->connect("DBI:mysql:$db;host=$db_host",$mysql_user, $mysql_passwd) 
      ||    die "ERROR: Connecting: $DBI::errstr\n";
    print "db connected\n";
    
    foreach $product(@product)
      {
    
        # Prepare the SQL query for execution
        my $sth = $dbh->prepare(<<End_SQL) 
    or die "Couldn't prepare statement: $DBI::errstr; stopped";
    SELECT item_id, published, modified, availability, summary, 
    product, reference FROM $my_table WHERE product LIKE '%$product%'
    End_SQL
    
          # Execute the query
          $sth->execute() or die "Couldn't execute statement: $DBI::errstr; stopped";
    
        # Fetch each row and print it
        while ( my ($item_id, $published, $modified, $availability, $summary, $product, 
    $reference) = $sth->fetchrow_array() )
          {
            print STDOUT ("ITEM ID: $item_id\n Product: $product\n Published: 
    $published Modified:$modified\n Availability: $availability\n Summary: $summary\n 
    Reference: $reference\n");};
    
    
        $count++;
    
      }
    # Disconnect from the database
    $dbh->disconnect();
    

1 个答案:

答案 0 :(得分:0)

您必须创建一个文件并写入

,而不是print STDOUT
open(my $f, ">$item_id") or die "Cannot create file $item_id: $!";
print $f "ITEM ID: $item_id\n Product: $product\n Published: $published Modified:$modified\n Availability: $availability\n Summary: $summary\n Reference: $reference\n";
close($f);