Are you sure that the parameters in the execute are all
properly defined? Try this:

my $dbh = DBI->connect( 'DBI:mysql:database=club', 'xxxx', 'xxxx', { PrintError => 0 } ) or die $DBI::errstr;

my $sql = "insert into bar( group_name, me, daily, item, unit, qty, amount, tax, total )
values( ?, ?, ?, ?, ?, ?, ?, ?, ? ) ";


my $sth = $dbh->prepare($sql) or die $dbh->errstr;

# If not defined, set to '' to avoid warnings.
for ($group_name, $me, $daily, $item, $unit, $qty, $amount, $tax, $total) {
 $_ ||= '' if ! defined $_;
}

$sth->execute($group_name, $me, $daily, $item, $unit, $qty, $amount, $tax, $total) or warn "Cannot execute FIRST Statement!!\n$DBI::errstr";

If this succeeds, review your code and make sure that each
of your execute parameters have some value prior to the
execute.

____________________________________________________________
Eamon Daly




----- Original Message ----- From: "Gerald Preston" <[EMAIL PROTECTED]>
To: "'Michael Stassen'" <[EMAIL PROTECTED]>
Cc: <[EMAIL PROTECTED]>; <mysql@lists.mysql.com>
Sent: Monday, February 28, 2005 3:19 PM
Subject: RE: insert data



Michael,

This is the actual code except for the "xxxx":

my $dbh = DBI->connect( 'DBI:mysql:database=club', 'xxxx', 'xxxx', {
PrintError => 0 } ) or die $DBI::errstr;
my $sql = "insert into wolfies( group_name, me, daily, item, unit, qty,
amount, tax, total )
values( ?, ?, ?, ?, ?, ?, ?,
?, ? ) ";
my $sth = $dbh->prepare( $sql ) or die $dbh->errstr if $dbh->err;


 $sth->execute( $group_name, $me, $daily, $item, $unit, $qty, $amount,
$tax, $total ) or warn "Cannot execute FIRST Statement!!\n$DBI::errstr";

Question?  When I created the database club, is there anything I needed to
do concerning permissions or anything?

I am lost here.  I have been writing code on a SUN Oracle systems for over
five years.

Regards,

Jerry


-----Original Message----- From: Michael Stassen [mailto:[EMAIL PROTECTED] Sent: Monday, February 28, 2005 9:29 AM To: Gerald Preston Cc: [EMAIL PROTECTED]; mysql@lists.mysql.com Subject: Re: insert data

From perldoc DBD::mysql

  use DBI;

  $dsn = "DBI:mysql:database=$database;host=$hostname;port=$port";

  $dbh = DBI->connect($dsn, $user, $password);

So it's not a syntax problem.  Even if it were, we should detect the error
long before calling prepare or execute.

Perl is quite clearly telling you what is wrong.  Originally, you got

  Can't call method "prepare" on an undefined value.

for the line

  my $sth = $dbh->prepare( $sql );

which means that $dbh is undefined at the time of the call to prepare.

Now, you are getting

  Can't call method "execute" on an un undefined value

for the line

  $sth->execute( $group_name, $me, $daily, $item, $unit, $qty, $amount,
    $tax, $total ) or warn "Cannot execute FIRST
Statement!!\n$DBI::errstr";

which means that $sth is undefined at the time of the call to execute.

Are you showing us select lines of your code, rather than the actual code?
My best guess right now is that you haven't taken into account that "my" is
a scoping operator in perl, and in the lines you haven't showed us, the
variables in question ($dbh or $sth) go out of scope.


Michael

John Doe wrote:
Am Sonntag, 27. Februar 2005 22.19 schrieb Gerald Preston:

Hi Gerald


The object used:

 my $dbh=DBI->connect( 'DBI:mysql:database=club', 'xxx, 'xxxxx', {
PrintError => 0} ) or die $DBI::errstr;


I didn't see this part in your first post :-)

Hmm... I've never seen a '=' in the first argument passed to
DBI-connect...

Here's an functional example I'm using:

my $db ='database';
my $host ='hostname';
my $port ='1234';
$dbh=DBI->connect("DBI:mysql:$db:$host:$port",
     'a_username',
     'a_password',
     {RaiseError=>1,
     AutoCommit=>1})
    or die "$0: $DBI::errstr"; }


So, try using "club" instead of "database=club", and a hostname too.

greetings joe


[nothing new below]


-----Original Message-----
From: John Doe [mailto:[EMAIL PROTECTED]
Sent: Sunday, February 27, 2005 6:37 AM
To: mysql@lists.mysql.com
Subject: Re: insert data

Hi Gerald


I am trying to insert data for the first time using MySQL.  In Oracle I
used the following:

#  my $sql = "insert into bar( group_name, me, daily, item, unit, qty,
amount, tax, total )

# values( ?, ?, ?, ?, ?, ?, ?,
?, ? ) ";
my $sth = $dbh->prepare( $sql );
die $dbh->errstr if $dbh->err;
$sth->execute( $group_name, $me, $daily, $item, $unit, $qty, $amount,
$tax, $total ) || die "Cannot execute FIRST Statement!!\n$DBI::errstr";



I keep getting "Can't call method "prepare" on an un undefined value. All the name listed are correct by looking at MySQLAdmin1.3\4.

Apart from David Logan's answer:

You have to create the $dbh object first (man DBI); the "undefined value"
in

the error message refers to that.


HTH

joe

-- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]





--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]




--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]



Reply via email to