2013-05-05 1 views
1

Я пытаюсь запустить оператор select в базу данных sqlite3 с использованием Perl DBI. Ниже приведен код:Ошибка при запуске sql-оператора на sqlite3 db с использованием Perl DBI

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 :: ул выполнить не удалось: вызывается с 1 связываемых переменных при 0 необходимы на /home/mysite.cgi линии 33

Я проверил, что база данных и таблица существуют, и один и тот же запрос работает нормально, если я использовал командную строку sqlite3 для запуска запроса.

Благодаря

ответ

1

$sth - это инструкция. Он представляет SQL-запрос/запрос, поэтому необходимость предоставления SQL-запроса объекту снова не имеет смысла.

Арги $sth->execute ожидаются значения, необходимые для заполнения сменных параметров (?) в запросе.

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

В вашем случае, поскольку ваш запрос не использует сменные параметры, вы не должны передавать какие-либо аргументы для выполнения.

$sth->execute(); 
1

Вы называете команду выполнить с неправильными параметрами. Вы уже настроили инструкцию SQL в предыдущей строке, вам не нужно делать это снова. Попробуйте это вместо:

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

Nit: 'die" Не удалось выполнить инструкцию: ". $ dbh-> errstr; 'никогда не будет выполнен, потому что он использует' RaiseError'. – ikegami