[求助]DBD::Pg用bind_param说INSERT has more target columns than expr.

[求助]DBD::Pg用bind_param说INSERT has more target columns than expr.

DBD::Pg 2.51
DBI 1.604
perl, v5.8.8 built for i686-linux-thread-multi

my $sth = $dbh->prepare( "INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( ? )" );
my $str="‘AC’, 12, -2, 1";
$sth->execute($str);

报错:
DBD::Pg::st execute failed: ERROR:  INSERT has more target columns than expressions at test.pl line 19.

换成 my $sth = $dbh->prepare( "INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( ‘AC’, 12, -2, 1 )" ); 就可以。

是哪的问题?


还有就是,如何判断perl找到的是哪个版本的pm ?我的@INC有一堆地方,用包管理器和CPAN.pm的安装路径不同,虽然已经人工确定第一个是上面写的版本,但每次去翻目录看文件挺麻烦的。
————————————————————————————————————————————
$rv = $sth->execute(@bind_values)
但我只有一个问号,用array的话就:
DBD::Pg::st execute failed: called with 4 bind variables when 1 are needed at ./insert2db.pl line 98, <INFILE> line 11.
______________________________________________________
是否要指定4列就一定要用4个问号传递数据?

$sth->do($str);试试
do的话不能用 ?
书上说重复prepare的效率不高。
我是要插入一堆数据。

$dbh->do( "INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( 'AC', 12, -2, 1 )" );
正常。

$dbh->do( "INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( $str )" );
当然,也是正常的。

试试.
$dbh->do(q{
                update inventory.employee_prefs
                set value = ?, last_updated = sysdate
                where key = ? and employee_id = ?
            }, {}, $value, $key, $ARQL::Authen::user{emp_id});
$dbh->do( q{INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( ? )} , {}, $str);

DBD::Pg::db do failed: ERROR:  INSERT has more target columns than expressions at ../project1/test.pl line 20.

还是报错。

PS:刚才切换NX时不小心点到评价的链接上了,抱歉。
呵呵,,仔细看看报错....my @str=(‘AC’, 12, -2, 1);
都是4项呀?
INSERT has more target columns than expressions 是说哪个多了?是表格的列名多了吗?
$str="AC,1";
$dbh->do( q{INSERT INTO tmp (tmpchar,tmpint,tmpreal) VALUES ( ?,? )} , {}, $str,1);
报错。

$str="AC,1";
$dbh->do( q{INSERT INTO tmp (tmpchar,tmpint) VALUES ( ?,? )} , {}, $str,1);
正常。

找到原因了:","被解释为字符。
那我应该如何分隔呢?

当然,实在不行就用4个问号。
不是和你说了?
my @str=(‘AC’, 12, -2, 1);
$dbh->do( q{INSERT INTO epdview (ac, firstchar, maxleft, maxright) VALUES ( ? )} , {}, @str);


QUOTE:
原帖由 smonkey0 于 2008-4-14 19:42 发表
呵呵,,仔细看看报错....my @str=(‘AC’, 12, -2, 1);

我光注意前半句了……

查了cpan,
$rv = $sth->execute(@bind_values)

但array是对应问号的,一个问号还是不行。