2009-10-18 9 views
1

Firefox 용 확장 기능을 개발 중이며 SQLite DB를 만들었습니다. 테이블에 값을 삽입 할 때 오류 메시지가 표시됩니다. 오류 : http://en.wikipedia.org에 대한 메서드가 UnnamedClass.toString을 <에 호출 할 수있는 권한이 거부되었습니다. 삽입 할 문자열 값이 변수에 저장됩니다.자바 스크립트를 사용하여 변수가있는 SQLite에 삽입

var book = "Harry Potter"; 
var myInsertQuery = 'INSERT INTO mybooks_tbl(title) VALUES('+ book + ');'; 

어떻게 데이터를 테이블이 아닌 변수로 테이블에 삽입합니까?

환호

+1

해당 오류 메시지는 문제와 관련이 없습니다. 코드를 더 게시 하시겠습니까? – Nickolay

답변

2

SQLite는이 string literals에 대한 ANSI 표준은 다음과 : 그래서

A string constant is formed by enclosing the string in single quotes ('). A single quote within the string can be encoded by putting two single quotes in a row

:

function sqlstr(s) { 
    return "'"+s.replace(/'/g, "''")+"'"; 
} 

var query= 'INSERT INTO books(title) VALUES('+sqlstr(book)+');'; 

당신은 이런 식으로 모든 문자열 리터럴 탈출을 기억해야한다, 또는 당신이 만든 것 클라이언트 측 SQL 주입 구멍

+3

정말로, 당신은 스스로 벗어나지 말아야합니다. 사용할 수있는 바인딩 함수를 사용해야하며 엔진에서 처리하도록해야합니다. https://developer.mozilla.org/En/Storage#Binding_Parameters – sdwilsh

+0

감사합니다. 매개 변수를 바인딩하여 그 주위에 방법을 발견했습니다. – fftoolbar

1

문자열에만 오류가 있습니다. var query = 'INSERT INTO books (제목) VALUES ('+ sqlstr (book) + ');';

tx.executeSql ('INSERT INTO CLASS_LIST ("class_title", "") VALUES ("+ v.classTitle +")');

관련 문제