【问题标题】:Why does SQLite complain about the syntax of my prepared statement?为什么 SQLite 抱怨我准备好的语句的语法?
【发布时间】:2010-12-07 22:03:44
【问题描述】:

我无法让 sqlite3 中的准备好的语句正常工作。我正在使用 Perl 和 Perl DBD 框架。下面是我使用的代码:

#This is a function I have defined
sub query($@){
    my $st = $db->prepare(shift);
    $st->execute(@_);
}

#And it is used like so
query("UPDATE rooms SET name = ?, SET capacity = ? WHERE id = ?", 
    $name, $capacity, $id);

当我尝试这样做时,我收到以下错误:

DBD::SQLite::db 准备失败:靠近“SET”:dbdimp.c 行的语法错误(1) 271 在 database.pm 第 80 行。

为什么会出现这个错误?如果我在不使用准备好的语句的情况下尝试它,它会起作用。我的应用程序中的所有其他准备好的语句都有效,除了 UPDATE 查询。

【问题讨论】:

  • 看起来您正在为您的模块使用一个由所有小写字母组成的名称。不要这样做,因为这样的名称是为 pragma 保留的。此外,将模块放在顶级命名空间中无论如何都是不好的做法。您可能最终将您的模块之一命名为Config.pm
  • 当我遇到这类问题时,我会直接在数据库 shell 中尝试 SQL 语句,看看是语句有问题还是 Perl 有问题。
  • 我坐在我面前的这个页面,我仍然无法弄清楚哪里出了问题! sqlite.org/lang_update.html

标签: perl sqlite prepared-statement syntax-error


【解决方案1】:

您的查询,使用标准(和 sqlite 的)UPDATE 语法是

UPDATE rooms SET name = ?, capacity = ? WHERE id = ?

没有重复的 SET

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多