Thread Dynamisches Binden bei DBI (15 answers)
Opened by renee at 2005-09-13 12:32

renee
 2005-09-14 11:30
#33532 #33532
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
This piece of code works:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#! /usr/bin/perl

use strict;
use warnings;
use DBI ':sql_types';

my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb);dbq=db1.mdb',user,pass);

my $col = 'Testcol';

my $statement = "INSERT INTO table (`$col`) VALUES(?)";

my $coltype = get_type($col,$dbh);
$coltype = 'SQL_'.$coltype;
my $sth = $dbh->prepare($statement);

for(2..1000){
my $var = <STDIN>;
chomp $var;
no strict 'refs';
$sth->bind_param(1,$var,&{"DBI::$coltype"});
use strict 'refs';
$sth->execute($var) or die $dbh->errstr();
}

sub get_type{
my ($name,$dbh) = @_;
my ($sthcolinfo) = $dbh->column_info(undef,undef,undef,$name);
my $hashref = $sthcolinfo->fetchrow_hashref();
return $hashref->{TYPE_NAME};
}


But when I split the code in "script" and "module" it does not work.
I've tried this:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
#! /usr/bin/perl

use strict;
use warnings;
use lib qw(.);
use DbiTest;
use DBI ':sql_types';

my $col = 'Testcol';
DbiTest->new($col);


module:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
package DbiTest;

use strict;
use warnings;
use DBI ':sql_types';

sub new{
my ($class,$col) = @_;
my $dbh = DBI->connect('DBI:ODBC:driver=Microsoft Access-Treiber (*.mdb);dbq=db1.mdb',user,pass);

my $statement = "INSERT INTO table (`$col`) VALUES(?)";

my $coltype = get_type($col,$dbh);
$coltype = 'SQL_'.$coltype;
my $sth = $dbh->prepare($statement);

for(2..1000){
my $var = <STDIN>;
chomp $var;
no strict 'refs';
$sth->bind_param(1,$var,&{"DBI::$coltype"});
use strict 'refs';
$sth->execute($var) or die $dbh->errstr();
}
}

sub get_type{
my ($name,$dbh) = @_;
my ($sthcolinfo) = $dbh->column_info(undef,undef,undef,$name);
my $hashref = $sthcolinfo->fetchrow_hashref();
return $hashref->{TYPE_NAME};
}

1;



With that code the script dies with the following errormessage:
Code: (dl )
Usage: SQL_LONGVARCHAR() at DbiTest line 21
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Dynamisches Binden bei DBI