1

我正在尝试使用 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 命令行运行查询,相同的查询工作正常。

谢谢

4

2 回答 2

1

You're calling the execute command with incorrect parameters. You've already setup the SQL statement in the previous line, you don't need to do it again. Try this instead:

$sth->execute() or die "Couldn't execute statement: " . $dbh->errstr;
于 2013-05-05T03:15:09.077 回答
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");

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

$sth->execute();
于 2013-05-05T03:24:59.033 回答