Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^3: Updating or Inserting a database from a txt file

by Adrade (Pilgrim)
on May 12, 2005 at 09:11 UTC ( [id://456307]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Updating or Inserting a database from a txt file
in thread Updating or Inserting a database from a txt file

Hey Nik,

Sorry for taking so long to reply.

To create a table, try doing this:
$dbh->do("CREATE TABLE `games` (`gamename` TEXT, `gamedesc` TEXT, `gam +ecount` TEXT );");
Then, create a unique index on the table - the 200 is a length that you can modify if you want.
$dbh->do("ALTER TABLE `games` ADD UNIQUE `UNQINDX` ( `gamename` ( 200 +) )");

You should now successfully be able to use REPLACE on your table.

Taking a look at your code...
my (@row, $gamename, $gamedesc, $gamecount); # selecting count(*) will run faster my $select = $dbh->prepare( "SELECT count(*) FROM `games` WHERE `gamen +ame`=?" ); # column `gamecount` was labeled as `gamecounter` my $insert = $dbh->prepare( "INSERT INTO `games` (`gamename`, `gamedes +c`, `gamecount`) VALUES (?, ?, ?)" ); my $update = $dbh->prepare( "UPDATE games SET gamedesc=?, gamecount=? +where gamename=?" ); open (FILE, "<../data/games/descriptions.txt") or die $!; while (<FILE>) { chomp; ($gamename, $gamedesc) = split /\t/; $select->execute( $gamename ); if ($select->fetchrow_array) { # WARNING: $gamecount isn't defined! $update->execute( $gamedesc, $gamecount, $gamename ); } else { $insert->execute( $gamename, $gamedesc, 0 ); } } close (FILE);
I'm a bit tired, but I hope this helps! Note my comments within the code.

The error in your message below indicates that the execute method isn't receiving the correct number of variables. Check to see that the file is tabbed correctly.

Best,
  -Adam

Replies are listed 'Best First'.
Re^4: Updating or Inserting a database from a txt file
by Nik (Initiate) on May 12, 2005 at 10:22 UTC
    Thanks Adam but actually i have quit tryign to do it with my way and i decided to do it with your way since it is more straighforward and less lines of code: Now the code is like this:
    #=======================LOADING THE .TXT TO THE DATABASE============== +========== my $replace = $dbh->prepare( "REPLACE INTO games (gamename, gamedesc, +gamecounter) VALUES (?, ?, ?)" ); open (FILE, "<../data/games/descriptions.txt") or die $!; while (<FILE>) { chomp; if (length) { $replace->execute( split(/\t/, $_, 2), 0 ) or print $dbh->errs +tr; } } close (FILE);
    But the records never get updated and if i delete a row on the txt file but the insertion of a new row or an edit of an existing one work ok :-)

    Also after this code i ahve this:
    if( param() ) { $dbh->do( "UPDATE games SET gamecounter=gamecounter+1 WHERE gamena +me='$gamename'" ); $dbh->do( "UPDATE guestlog SET passage='$gamename' WHERE host='$ho +st'" ); $sth = $dbh->prepare( "SELECT * FROM games WHERE gamename=?" ); $sth->execute( $gamename ); $row = $sth->fetchrow_hashref; print span( {class=>'lime'}, "Είσαι ο $row->{gamecounter} ος πο +υ κατεβάζει το $row->{gamename} !!" ), br; print span( {class=>'yellow'}, "Ελπίζω να σου αρέσει και να σου φ +ανεί χρήσιμο!" ); print p( {-align=>'center'}, a( {href=>'index.pl'}, img {src=>'. +./data/images/back.gif'} )); print "<script language='Javascript'>location.href=/data/games/$ga +mename.rar</script>"; } which is supposed to print a message when a user hits a game button to + be download and show the user what he choosed to downlaoded and how +many time it was in general downloaded but it doesnt.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://456307]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2024-04-24 11:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found