Problems using Perl DBI to edit database entries - basic stuff

Hello. I am taking a Perl class in college and we've briefly covered SQL and moved on. We have a term project and we can do whatever we want. My project will rely strongly on an SQL Database so I am trying to learn as much about Perl DBI as I can to get things up and going.

I am basically making CGI scripts that take user input from forms and then put that into database tables so I will need to be able to search, edit, insert and delete data entries. I am essentially having trouble getting on my feet with how to manipulate data in my database.

My instructor set up a database for me which I can access and edit but I am already having trouble with my script. I am hoping that someone can help me figure out what things I need to include in my code to get this working.

So far, I have a CGI script that takes a few fields of form data from a webpage: username, email, and password. I am attempting to put this into an SQL table called "user_accounts" and this table has three colomns named "username", "password", and "email".

Here is my Perl code with the DBI code in there to access the database:

#!/usr/local/bin/perl
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);

print header;
print start_html;
use DBI;

#FROM FORM
$NewUserName=param('NewUserName');
$NewEmail=param('NewEmail');
$Password=param('Password');
$CryptPassword=crypt("$Password","CS");

#SQL CODE

$dbh = DBI->connect("DBI:mysql:daveDB","dave","pass412");
$sth = $dbh->prepare($sql);
$res = $sth->execute();
$dbh = ("INSERT INTO user_accounts (username, email, password)
VALUES ($NewUserName, $NewEmail, $CryptPassword)");
$sth->finish();
$dbh->disconnect();

print end_html;

When I run this, I get this error message: "Can't locate object method "disconnect" via package "INSERT INTO user_accounts (username, email, password)"

I have googled this error message and I have edited my code a little here and there and gotten a few different errors which I do not fully understand or know how to fix. I have read over the pages of my textbook that cover DBI and I have looked at Oreilly's Perl DBI book and I have googled countless times and I just cant figure out how to simply make some lines of code that access and edit my SQL database. I really need some help so I can get things functioning for my project as I am going to eventually run out of time.

Any help is very appreciated
Dave247

Dave,
What you have is mostly a mis-ordering of the lines. try this instead:

#SQL CODE

my $dbh = DBI->connect("DBI:mysql:daveDB","dave","pass412");
my $sql = "INSERT INTO user_accounts (username, email, password)
 VALUES ($NewUserName, $NewEmail, $CryptPassword)";
my $sth = $dbh->prepare($sql);
my $res = $sth->execute();
$sth->finish();
$dbh->disconnect();

print end_html;

Once $dbh is defined, a "prepare" call is needed to get the SQL statement into the object.

As a side note, for best coding practice, you should have a " -w" after the perl line at the top (like this: "#!/usr/local/bin/perl -w") OR "use warnings;" to be sure you're told about things that could be mistakes. It's also a very good idea to "use strict;", which forces you to declare variables with "my" before you can use them. This also helps to make in obvious what variable scope you're expecting and can really reduce the amount of hair you pull out during a project. :slight_smile:

HTH!

Steve