0

PerlDBIを使用してSqlite3テーブルに値を挿入したいと思います。ハードコードされた値を問題なく挿入できました。perl変数を使おうとすると、「DBD :: SQLite :: db do failed:no suchcolumn:」というエラーが表示されます。

これは機能します:

$dbh->do("insert into Gene values (12, 'AAAAAA', 66, 86, 76)");

しかし、このコード

$dbh->do("INSERT INTO Gene values (NULL, $sequence, $siteNumber, $begin, $length)");

エラーをスローします

DBD::SQLite::db do failed: no such column
4

2 に答える 2

7

当然のことながら、常にSQL ステートメントと変数値のプレースホルダーを使用する必要がありますprepareexecute

このコードを試してください

my $sth = $dbh->prepare('INSERT INTO Gene VALUES (?, ?, ?, ?, ?)');
$sth->execute(undef, $sequence, $siteNumber, $begin, $length);
于 2013-03-06T02:25:27.220 に答える
1

問題は $sequence にあり、insert ステートメントで引用符が有効な SQL 文字列リテラルである必要がありました。その結果、意図した文字列 'AAAAAA' ではなく、AAAAAA という列を参照しようとしていると見なされました。Perl の文字列補間では、引用符は追加されません。

ただし、プレースホルダーと $dbh->prepapre は、ここで最も堅牢なソリューションです (たとえば、文字列に引用符文字 ' が含まれている場合はどうすればよいですか? $dbh->prepare は既に正しくコーディングされています)。

于 2013-03-06T09:07:58.710 に答える