【问题标题】:How to insert Perl variables into Sqlite3如何将 Perl 变量插入 Sqlite3
【发布时间】:2013-02-20 15:34:50
【问题描述】:

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

【问题讨论】:

  • 不要说“我出错了”。总是说“这是我遇到的错误”,然后告诉我们确切的错误。 不要转述它。不要重新输入。完全从屏幕上剪切并粘贴错误消息。
  • "DBD::SQLite::db do failed: no such column" 是我得到的错误。
  • 您想要调试的第一件事是print "INSERT INTO Gene values (NULL, $sequence, $siteNumber, $begin, $length)";,这样您就知道正在执行什么SQL命令。我们不能神奇地知道这 4 个变量的值是什么。

标签: perl sqlite


【解决方案1】:

您应该始终使用prepareexecute 您的 SQL 语句,并且理所当然地为变量值使用占位符。

试试这个代码

my $sth = $dbh->prepare('INSERT INTO Gene VALUES (?, ?, ?, ?, ?)');
$sth->execute(undef, $sequence, $siteNumber, $begin, $length);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2021-12-05
      • 2017-04-14
      • 1970-01-01
      • 2011-05-02
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 2023-03-30
      相关资源
      最近更新 更多