使用Perl DBI在sqlite3数据库上运行sql语句时出错

时间:2013-05-05 03:02:32

标签: perl sqlite dbi

我正在尝试使用Perl DBI对sqlite3数据库运行select语句。以下是代码:

my $dbh = DBI->connect( "DBI:SQLite:dbname=./GenBankData.db" , "" , "" , { PrintError => 0 , RaiseError => 1 } );
    my $Sql = 'select AccessionQueryResultID, AccessionNumber, Definition from AccessionQueryResult';
    my $sth = $dbh->prepare( $Sql )  or die "Couldn't prepare statement: " . $dbh->errstr;;
    $sth->execute( $Sql) or die "Couldn't execute statement: " . $dbh->errstr;

但是我收到以下错误: DBD :: SQLite :: st执行失败:在/home/mysite.cgi第33行需要0时使用1个绑定变量调用

我已检查数据库和表是否存在,如果我使用sqlite3命令行运行查询,则相同的查询正常工作。

由于

2 个答案:

答案 0 :(得分:1)

您正在使用不正确的参数调用execute命令。您已经在上一行中设置了SQL语句,您不需要再次执行此操作。试试这个:

$sth->execute() or die "Couldn't execute statement: " . $dbh->errstr;

答案 1 :(得分:1)

$sth是一个语句句柄。它代表SQL语句/查询,因此不得不再次向对象提供SQL语句。

args $sth->execute期望在查询中填写可替换参数(?)所需的值。

my $sth = $dbh->prepare("INSERT INTO MyTable VALUES (?, ?)");
$sth->execute(1, "a");
$sth->execute(2, "b");
$sth->execute(3, "c");

在您的情况下,由于您的查询不使用任何可替换参数,因此您不应传递任何args来执行。

$sth->execute();