2009-10-19 33 views
0

我无法使sqlite3中的准备语句正常工作。我正在使用Perl和Perl DBD框架。下面是我的代码使用方法:为什么SQLite会抱怨我准备好的语句的语法?

#This is a function I have defined 
sub query([email protected]){ 
    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 prepare failed: near "SET": syntax error(1) at dbdimp.c line 
271 at database.pm line 80. 

我为什么会得到这个错误?如果我尝试不使用准备好的语句,它就可以工作。除了UPDATE查询之外,我的应用程序中的其他准备好的语句都起作用。

+0

它看起来像您使用的是由所有小写字母为模块的名称。不要这样做,因为这样的名字是为编译指示保留的。此外,无论如何,将你的模块放在顶层命名空间是不好的做法。你最终可能会命名一个模块'Config.pm'。 –

+0

当我遇到这些问题时,我直接在数据库shell中尝试SQL语句,以查看它是否存在与Perl语句或Perl问题有关的问题。 –

+0

我坐在这个页面前面,我仍然无法弄清楚什么是错的! http://www.sqlite.org/lang_update.html – Marius

回答

11

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

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

无需重复设置

相关问题