如何将Perl变量插入Sqlite3

时间:2013-03-06 01:19:27

标签: perl sqlite

我想使用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

2 个答案:

答案 0 :(得分:7)

您应始终prepareexecute您的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>