2014-01-20 3 views
0

데이터베이스에서 행을 삭제하는 데 사용하고 싶은 기능이 있습니다. 이것은 이전에 행을 제거하기 위해 DELETE 문을 사용하는 유일한 방법 이었지만 recID 값이 삭제되는 행 ID 번호가되도록 recID라는 변수로 1을 대체하려고합니다. 따라서 recID = 6 인 경우 ID = 6 인 행을 삭제하는 함수가 필요합니다.SQLite 데이터베이스에서 변수와 동일한 ID를 가진 행을 삭제하는 방법

'DELETE FROM MyRecords WHERE ID=1'; 

필자가 사용해 본 표기법은 도움이되거나 차이가 있다면 다음과 같습니다. 당신이 당신의 변수, recID는 오직 숫자를 포함 할 것이라고 확신 경우

db.transaction(function(transaction) { 
    transaction.executeSql( //DELETE STATEMENT HERE ); 
}); 
+0

매개 변수화 쿼리 당신이 원하는 것입니다, 아마. SQlite는 현재 사용하고있는 프로그래밍 언어에 영향을 미치지 않습니다. –

+0

답장을 보내 주셔서 감사합니다. 자바 스크립트를 사용하고 있습니다. – user3217123

답변

0

executeSql은 인수 (체크 definition)를 지원합니다.

가 좋아 사용

db.transaction(function(transaction) { 
    transaction.executeSql("DELETE FROM MyRecords WHERE ID=?", [recId]); 
}); 
+0

완벽하게 작동합니다. 정말 고마워요! – user3217123

0

, 당신은 사용할 수 있습니다

transaction.executeSql("DELETE FROM MyRecords WHERE ID=" + recID); 

recID 응용 프로그램 외부에서 그러나 (사용자 입력)을 제공하는 경우를 준비된 명령문을 사용하고 데이터베이스 API를 사용하여 명령문이 준비된 후에 매개 변수를 설정해야합니다. 그렇지 않으면 최대 SQL injection 명의 공격을합니다.

나는 랩 SQLite는 어떤 버전은 당신의 SQLite는 래퍼의 세부 사항, 또는 모르겠지만 sqlite3를 C API를 사용하여 준비된 문을 생성하면이 같은 갈 것 :

// sqlite3* db = ... 
sqlite3_stmt* stmt; 
sqlite3_prepare_v2(db, "DELETE FROM MyRecords WHERE ID=?", -1, &stmt, 0); 
sqlite3_bind_int(stmt, 1, recID); 
sqlite3_step(); 
// ... 
sqlite3_finalize(stmt); 

이 간단한 예제를 실제 응용 프로그램에서 수행하고자하는 모든 오류 검사를 제외하지만 어쨌든 구문이 다른 래퍼를 사용하고 있으므로 이러한 함수를 어떻게 래핑하는지 파악해야합니다.

관련 문제