2009-10-19 37 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 = ? 

無需重複設置

相關問題