For Programmers: Free Programming Magazines  


Home > Archive > PERL Beginners > November 2007 > DBD::mysql::st execute failed: Column count doesn't match value count at row 1 a









You are viewing an archived Text-only version of the thread. To view this thread in it's original format and/or if you want to reply to this thread please [click here]

 

Author DBD::mysql::st execute failed: Column count doesn't match value count at row 1 a
Siva Prasad

2007-11-16, 8:00 am



Hi Gurus,



I am getting the following error while trying to insert into database.I am
getting the following only for this table, For all other tables I am able to
isnert data



----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------

DBD::mysql::st execute failed: Column count doesn't match value count at row
1 a

t db_access.pm line 63.





Below is my script



my $XML_FILE="E:/Project/scripts/Master.xml";

my $ref = eval { XMLin($XML_FILE) };

my $DB_CLASS_OBJ;

my $RECS;

my $ATTEMPTED_RECS=0;

my $table="test";

my $LOGFILE="E:/project/database/logs/logs.txt";

(open my $FH_LOG_FILE, '>', $LOGFILE) or die "$!";



$DB_CLASS_OBJ=DB_ACCESS->new("fashion","127.0.0.1","3306","root","sqlroot123
");

$DB_CLASS_OBJ->DB_CONN;

$RECS=$DB_CLASS_OBJ->DB_VALIDATE($table);



print $FH_LOG_FILE "Before Inserting No. of Recs in $table are : $RECS\n";



foreach my $REC (@{$ref->{Course}})

{

$ATTEMPTED_RECS++;

my $sql="insert into $table values
('2345','4355','834','894,'766');

$DB_CLASS_OBJ->DB_INSERT("$sql");

$DB_CLASS_OBJ->DB_FINISH;



}



$DB_CLASS_OBJ->DB_DISCONNECT;



close $FH_LOG_FILE;





Below is the module which I am using in the script..

#!/usr/bin/perl -w



package DB_ACCESS;



use strict;

use warnings;

use DBI;



sub new

{



my $class=shift;

my $db_name=shift;

my $hostname=shift;

my $port=shift;

my $username=shift;

my $password=shift;

my $DB_OBJ;

my $ST_EXECUTE;

bless
{db_name=>$db_name,hostname=>$hostname,port=>$port,username=>$username,passw
ord=>$password,DB_OBJ=>$DB_OBJ,ST_EXECUTE=>$ST_EXECUTE},$class;

}





sub DB_CONN

{

my $self=shift;

my
$DSN="DBI:mysql:database=$self->{db_name};host=$self->{hostname};port=$self-
>{port}";


$self->{DB_OBJ}=DBI->connect($DSN,$self->{username},$self->{password}) or
die "Cannot connet to database $DBI::errstr\n";



}



sub DB_DML

{

my $self=shift;

my $sql=shift;

$self->{ST_EXECUTE}=$self->{DB_OBJ}->prepare($sql) or die "cannot
prepare SQL statement $DBI::errstr\n";

$self->{ST_EXECUTE}->execute() or die "cannot execute the SQL
statement $DBI::errstr\n";

my @row;

while(@row=$self->{ST_EXECUTE}->fetchrow_array())

{

print"Row:@row\n";

}

warn "Error in fetching data from the table $DBI::errstr\n" if
$DBI::err;

}



sub DB_DDL

{

my $self=shift;

my $sql=shift;

$self->{ST_EXECUTE}=$self->{DB_OBJ}->prepare($sql) or die "cannot
prepare SQL statement $DBI::errstr\n";

$self->{ST_EXECUTE}->execute or die "cannot execute the SQL
statement $DBI::errstr\n";



}

sub DB_INSERT

{

my $self=shift;

my $query=shift;

print "$query\n";

# To Turn OFF the Foriegn key checks

# $self->{ST_EXECUTE}=$self->{DB_OBJ}->prepare("set
FOREIGN_KEY_CHECKS = 0");

# $self->{ST_EXECUTE}->execute();

$self->{ST_EXECUTE}=$self->{DB_OBJ}->prepare($query) or die
"cannot prepare SQL statement $DBI::errstr\n";

$self->{ST_EXECUTE}->execute() or die "cannot execute the SQL
statement $DBI::errstr\n";



}



sub DB_FINISH

{

my $self=shift;

$self->{ST_EXECUTE}->finish;

}

sub DB_DISCONNECT

{

my $self=shift;



$self->{DB_OBJ}->disconnect or warn "Error in Disconnecting
$DBI::errstr\n";

}



sub DB_VALIDATE

{



my $self=shift;

my $table=shift;

my $no_recs=$self->{DB_OBJ}->do("select * from $table");

$self->{ST_EXECUTE}=$self->{DB_OBJ}->prepare("select * from
$table") or die "cannot prepare SQL statement $DBI::errstr\n";

$self->{ST_EXECUTE}->execute or die "cannot execute the SQL
statement $DBI::errstr\n";

my @row;



while(@row=$self->{ST_EXECUTE}->fetchrow_array())

{

print"Row:@row\n";



}

warn "Error in fetching data from the table $DBI::errstr\n" if
$DBI::err;

return $no_recs;

}

1;



----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------------------------------------------
----------------------------------------





I am passing the "insert into $table values
('2345','4355','834','894,'766');" to DB_INSERT method in DB_ACCESS.pm but
if I print the sql_statement from the DB_INSERT method it is showing as



insert into test values ('0','0','00001','00001')





I am passing the correct number of values (which are equal to the number of
columns in the table)





Below is the table description:





| c_id | bigint(20) | NO | PRI |

| t_id | bigint(20) | NO | PRI |

| user_id | bigint(20) | NO | PRI |

| profile_id | bigint(20) | NO | PRI | | |

| cl_id | bigint(20) | NO | PRI | | |





5 rows in set (0.00 sec)



Can anybody let me know where I am going wrong.





Thanks,

PP






Sponsored Links







Also available: Server administration forum archive | Web Design forum archive | Software forum archive | Hardware reviews archive

Copyright 2008 codecomments.com