문제

데이터베이스 스키마 (지금까지 하나의 테이블 만)와 해당 테이블의 삽입 문을 하나의 파일로 작성했습니다. 그런 다음 다음과 같이 데이터베이스를 만들었습니다.

$ sqlite3 newdatabase.db
SQLite version 3.4.0
Enter ".help" for instructions
sqlite> .read ./schema.sql
SQL error near line 16: near "s": syntax error

내 파일의 16 행은 다음과 같습니다.

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there\'s');

문제는 단일 인용문의 탈출 문자입니다. 또한 단일 견적을 탈출하여 두 번 시도했습니다 (사용 \\\' 대신에 \'), 그러나 그것은 작동하지 않았습니다. 내가 뭘 잘못하고 있죠?

도움이 되었습니까?

해결책

단일 따옴표를 두 배로 늘리십시오 (많은 데이터베이스는 그렇게 기대합니다).

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

관련 인용문 문서:

문자열 상수는 문자열을 단일 따옴표 ( ')로 둘러싸고 형성됩니다. 문자열 내의 단일 견적은 파스칼에서와 같이 두 개의 단일 따옴표를 연속으로 넣어 인코딩 할 수 있습니다. 백 슬래시 문자를 사용한 C 스타일 탈출은 표준 SQL이 아니기 때문에 지원되지 않습니다. Blob Literals는 16 진수 데이터를 포함하는 문자열 리터럴이며 단일 "x"또는 "x"문자가 선행됩니다. ... 문자 그대로의 가치는 "널"토큰 일 수 있습니다.

다른 팁

나는 당신이 단일 견적을 두 배로 늘려 탈출하고 싶다고 생각합니다.

INSERT INTO table_name (field1, field2) VALUES (123, 'Hello there''s');

문자열의 모든 ( ') 교체하려면 사용하십시오.

.replace(/\'/g,"''")

예시:

sample = "St. Mary's and St. John's";
escapedSample = sample.replace(/\'/g,"''")

데이터베이스에 삽입 해야하는 루프 또는 JSON 문자열이있는 경우. 문자열을 단일 견적으로 바꾸십시오. 여기 내 해결책이 있습니다. 예제 단일 견적 인 문자열이있는 경우.

String mystring = "Sample's";
String myfinalstring = mystring.replace("'","''");

 String query = "INSERT INTO "+table name+" ("+field1+") values ('"+myfinalstring+"')";

이것은 C#과 Java에서 나를 위해 작동합니다

C#에서는 다음을 사용하여 단일 견적을 이중 견적으로 바꿀 수 있습니다.

 string sample = "St. Mary's";
 string escapedSample = sample.Replace("'", "''");

그리고 출력은 다음과 같습니다.

"St. Mary''s"

그리고 SQLITE와 직접 작업하는 경우; 문자열 대신 객체로 작업하고 dbnull과 같은 특별한 것을 잡을 수 있습니다.

private static string MySqlEscape(Object usString)
{
    if (usString is DBNull)
    {
        return "";
    }
    string sample = Convert.ToString(usString);
    return sample.Replace("'", "''");
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top