我想使用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
答案 0 :(得分:7)
您应始终prepare
和execute
您的SQL语句,并使用占位符作为变量值。
试试此代码
my $sth = $dbh->prepare('INSERT INTO Gene VALUES (?, ?, ?, ?, ?)');
$sth->execute(undef, $sequence, $siteNumber, $begin, $length);
答案 1 :(得分:1)
您的问题将出现在$ sequence,这需要在insert语句中引用为有效的SQL字符串文字。结果它认为你试图引用一个名为AAAAAA的列,而不是你想要的字符串'AAAAAA'。 Perl的字符串插值不会为你添加引号。
占位符和$ dbh-&gt; prepapre是迄今为止最强大的解决方案(例如,如果你的字符串包含引号字符'怎么办?'$ dbh-&gt; prepare已经正确编码了。)< / p>