2013-10-07 2 views
0

나는 tcl의 sqllite를 사용합니다. 이제 좋은 이잖아테이블 만들기 명령에서 변수를 사용하는 방법

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

하지만 대신 고정 된 테이블 이름의 변수 $ TABLENAME을 사용하려는 경우 내가 사용하는 것이다 : 테이블을 만들려면 내가 사용

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

하지만 Stackoveflow 어딘가에서 DB eval 문에 항상 중괄호를 사용해야한다는 것을 읽었습니다 (보안상의 이유로 생각합니다). 그래서 ""ok를 사용합니까? 아니면 어떻게해야합니까?

답변

3

SQLite 표현식의 테이블 이름은 매개 변수를 지원하지 않습니다. 매개 변수는 값인에만 사용할 수 있습니다. 보통 Tcl 변수 치환을 사용하여 테이블 이름을 넣어야하므로 매우 사용자가 이름을 지정할 수 없도록주의해야합니다 (사용자가 지정한 이름에서 테이블 이름으로의 매핑을 보관할 다른 테이블이 있어야합니다. 데이터베이스, 당신은 그것을 사용할 수도 있습니다).

테이블 생성과 함께 데이터 정의 문이나 데이터 쿼리 문을 혼합하는 것을 피하십시오. 대체 할 매개 변수의 이름으로 $var 대신 :var을 사용할 수도 있습니다. 동적으로 이름이 지정된 표에서 물건을 볼 때 작업을 훨씬 쉽게 할 수 있습니다.

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

동적 테이블 이름은 일반적으로 잘못된 디자인의 기호입니다. 접두어는 공유 호스팅 환경에서 유용 할 수 있지만 sqlite에서는 유용하지 않습니다. –

관련 문제