O.K.  I've finished my code to create a MySQL db and/or table, and I'd 
appreciate hearing your comments.  It works well, but it needs to be cleaned up 
before going live.  I've left some testing code in.  Go ahead and be brutally 
honest.  I've learned so much from this list already.

Thanks,
Marc

---------

#!/usr/local/bin/perl

use warnings;
use strict;
use CGI::Carp "fatalsToBrowser";

use feature 'say';

use DBI();
use CGI;
my $q = CGI->new();
say $q->header(), $q->start_html( -title => "Create MySQL db and table" );

    my $username = 'root';
    my $password = 'root';
    my $host     = "127.0.0.1:8889";
    my $db       = "test_dbb";
    # table name is set below

# Connect to the server to create the db, if it doesn't exist already.
  my $dbh_db = DBI->connect("DBI:mysql:database=;$host",
                         $username, $password,
                         {'RaiseError' => 1});


    my $qry_db = "CREATE DATABASE IF NOT EXISTS $db ";
    $dbh_db->do($qry_db) or die ("Can't create db!\n");

    if ($dbh_db) { say "Database '$db' was created successfully.<br /><br /><br 
/>" }

# Disconnect from the database.
  $dbh_db->disconnect();


# Connect to the database to create the table and fields.
  my $dbh_table = DBI->connect("DBI:mysql:$db;$host",
                                $username, $password,
                                {'RaiseError' => 1});

        my ($primary_key, @fieldnames);
        my $file_path = "../htdocs/carts/sql/data/orders.tsv";
        use File::Basename;
        my $table = fileparse($file_path, qr/\.[^.]*/);

        open (my $file_fh, '<', $file_path) || die ("Can't open $file_path for 
reading");
        my $count = 0;

        my $qry_table = "CREATE TABLE IF NOT EXISTS $table ( ";
        while (my $line = <$file_fh>) {
            last if $line =~ m/#/;  # can place comments below the ### line
            chomp $line;
            next if (! $line);  # skip any blank lines in the file...
            $line =~ tr|a-zA-Z0-9,_\t \(\)||cd;
            $count++;
            my @fields = split (/\t/ , $line);
            push ( @fieldnames, $fields[0] );
            if ($count == 1) {
                $primary_key = $fields[0];
            }
            my $key = $fields[0];
            my $keytype = $fields[1];
            if ($keytype) {
                $qry_table .= "`$key` $keytype, ";
            }
            else {
                $qry_table .= "`$key` TEXT, ";
            }
        }
        $qry_table .= "PRIMARY KEY (`$primary_key`) ) ENGINE=MyISAM DEFAULT 
CHARACTER SET latin1 COLLATE latin1_general_ci;";
        
        $dbh_table->do($qry_table) or die ("Can't create table!\n");
        if ($dbh_table) { say "Table '$table' was created successfully.\n" }
        
        close $file_fh;

say $q->end_html();

$dbh_table->disconnect();

__DATA__

Here is the partial contents of the orders.tsv file:


orderid smallint(6) unsigned NOT NULL
orderstatus     text
userlogin       text
user_uid        text
date    text
shiptype        text
Credit  text
minibasket      text
totalcalcs      text
shipcost        text
chargetotal     decimal(7,2)
comments        text
couponid        text
authamt text
PmtAVS  text
PmtAuth text
PmtType text
TransID text
coupontype      text
IP_Address      text
taxexempt       text
###
Comments:
The first field listed in this file is the Primary Key.
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to