2013-10-07 20 views
0

我使用tcl的sqllite。爲了創建一個表,我用:如何在創建表格中使用變量

DB eval { CREATE TABLE TableName (Component text NOT NULL, LC int NOT NULL) } 

現在,多數民衆贊成不錯,但如果我想使用的,而不是一個固定的表名變量$表名,我將不得不使用:

DB eval "CREATE TABLE $TableName (Component text NOT NULL, LC int NOT NULL)" 

但我已經讀過Stackoveflow的某個地方,總是應該爲DB eval語句使用大括號(我認爲這是出於安全原因)。 所以,「是好的,還是應該我做它有點不同?

回答

3

SQLite表達式中的表名不支持作爲參數;參數只能用於。你必須使用普通的Tcl變量替換來替換表名,所以應該小心,不要讓用戶指定名稱(有另一個表來保存從用戶指定的名稱到表名的映射;你已經有了一個數據庫,你也可以使用它)。

儘量避免將數據定義語句或數據查詢語句與表創建混合在一起,並且請注意,您也可以使用:var而不是$var作爲要替換的參數的名稱;當需要從動態命名的表中查找時,這可以使事情變得更容易:

db eval "SELECT component FROM $TableName WHERE LC = :lc" { 
    puts "component = $component" 
} 
+0

動態表名稱通常表示設計不好。前綴在共享主機環境中可能很有用,但在sqlite中不會有用。 –

相關問題