我正在尝试使用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命令行运行查询,则相同的查询正常工作。
由于
答案 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();