0

我想使用 Perl DBI 将值插入到 Sqlite3 表中。我能够毫无问题地插入硬编码值。当我尝试使用 perl 变量时,出现错误“DBD::SQLite::db do failed: no such column:”

这有效:

$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

当然,您应该始终prepareexecute您的 SQL 语句一起使用变量值的占位符。

试试这个代码

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

您的问题将出现在 $sequence 上,它要求在插入语句中引用是有效的 SQL 字符串文字。结果,它认为您试图引用名为 AAAAAA 的列,而不是您想要的字符串 'AAAAAA'。Perl 的字符串插值不会为您添加引号。

占位符和 $dbh->prepare 是迄今为止最强大的解决方案(例如,如果您的字符串包含引号字符 ' 怎么办?$dbh->prepare 已经正确编码)。

于 2013-03-06T09:07:58.710 回答