2009-12-16 5 views
210

아포스트로피가있는 값을 삽입하는 올바른 SQL 구문은 무엇입니까?아포스트로피 (작은 따옴표)가 포함 된 값을 삽입하는 방법은 무엇입니까?

Insert into Person 
    (First, Last) 
Values 
    'Joe', 
    'O'Brien' 

O가 값의 끝 태그 인 후에 아포스트로피라고 생각하므로 계속 오류가 발생합니다.

+13

SQL 인젝션 공격에 노출되지 않았는지 확인하십시오. 가능하면 매개 변수를 사용하십시오. – Andrew

+0

어떤 스크립팅 언어를 사용하고 있습니까? 예를 들어 PHP에서이 기능을 올바르게 수행하는 기능이 있습니다. – philfreo

+0

Andrew와 여기에 동의 :이 질문은 SQL 클라이언트 또는 "쿼리 브라우저"등을 통해 SQL을 실행하는 것과 관련된 것일뿐입니다. 실제로는 프로덕션 코드의 어딘가가 아닙니다. 매개 변수화 된 진술을 사용하지 않는 것은 어리 석다. – charstar

답변

320
(예 : 더블 업 작은 따옴표 문자) 당신의 SQL에 아포스트로피를 탈출

, 또는 작은 따옴표는 문자열 데이터의 시작과 끝을 지정하는 SQL의 특수 문자입니다. 즉 리터럴 문자열 데이터의 일부로 사용하려면 escape 특수 문자가 필요합니다. 작은 따옴표를 사용하면 일반적으로 따옴표를 두 배로 늘릴 수 있습니다. (대신 작은 따옴표 두 개의 작은 따옴표 문자가 아닌 이중 인용.)

: 수동으로 원시 SQL 인터페이스를 통해 데이터를 편집 할 때 당신은 오직 개발의 외부 쿼리를 작성하기 때문에이 문제에 대해 걱정해야하고 테스트는 드문 경우입니다. 코드에서 등 이스케이프 특수 문자 관리, SQL injection을 기술 및 프레임 워크 (당신의 스택에 따라),

+4

$ linkQuestion = str_replace (" '", "' '", $ linkQuestion); (읽기가 힘듭니다!) – user462990

15

아포스트로피를 벗어나야합니다. 당신의 insert 문이가되도록 T-SQL 이것은, 이중 아포스트로피입니다 : 대신

Insert into Person 
(First, Last) 
Values 
'Joe', 'O''Brien' 
+0

AFAIK'Values'는 중괄호로 묶어야합니다 (그러면 @JustinNiessner와 동일한 대답이됩니다) –

-2

사용합니다 (~ 키)를 역 따옴표;

SELECT First, Last FROM Person WHERE Last = 'O''Brien' 

을 아포스트로피 :

INSERT INTO Person 
    (First, Last) 
VALUES 
    ('Joe', 'O''Brien') 
       /\ 
      right here 

같은 쿼리를 선택 적용 :

`O'Brien` 
+3

데이터 입력을하지 않는 한 ... – BillyNair

+1

그러면 문제가됩니다. 역겨운? –

27

당신은 단지 작은 따옴표를 두 배로해야 ...

insert into Person (First, Last) 
values ('Joe', 'O''Brien') 
12

때문에이있다 작은 따옴표는 문자열의 시작과 끝을 나타내는 데 사용됩니다. 당신은 그것을 벗어날 필요가 있습니다.

간단한 대답은 두 개의 작은 따옴표 - '' -을 사용하여 SQL 데이터베이스가 ' 값을 저장합니다.

  • PostgreSQL REPLACE
  • 당신은 ''''를 확인하고이 경우 교체하려면 : 입력 값을 소독하기 위해 REPLACE 사용에

    봐로 문자열에 존재한다. 고독한 작은 따옴표를 피하기 위해.

    1

    eduffy had a good idea. 그는 코드 예제에서 거꾸로 가져 왔습니다. JavaScript 또는 SQLite에서 아포스트로피를 악센트 기호로 바꿀 수 있습니다.

    그는 우연히 O'Brian의 아포스트로피를 바꾸는 대신 악센트 기호를 문자열의 구분 기호로 사용했습니다. 실제로 이것은 대부분의 경우에 매우 단순한 해결책입니다.

    0

    어포 스트로피 문자는 함수를 아포스트로피의 ASCII table lookup 값 39와 함께 호출하여 삽입 할 수 있습니다. 문자열 값은 concatenate operator과 함께 연결할 수 있습니다.

    Insert into Person 
        (First, Last) 
    Values 
        'Joe', 
        concat('O',char(39),'Brien') 
    
    0

    큰 따옴표를 사용하십시오.

    insert into Person (First, Last) Values("Joe","O'Brien") 
    
    +2

    Informix를 알고 있지만 이것은 하나의 DBMS를 허용하지만 이것은 표준 SQL이 아닙니다. 그것. '작은 따옴표 및/또는 큰 따옴표를 사용하여 - 그가 할 수있는 "그는"하지마! "와 같은 문자열을 삽입하는 방법에 대해서도 언급해야합니다."그는 말했습니다. "하지마!" ''또는 ' "그는 말했다,"하지마! "" ". 수락 된 답변으로 오래된 질문에 새로운 대답을 추가 할 때, 새롭고 완전한 정보를 제공해야합니다. 큰 따옴표를 사용하는 것은 새롭지 만 몇 가지 DBMS로 제한됩니다. 당신은 그 (것)들을 받아들이는 그들의 적어도 한을 확인하기 위하여 통증을 가지고 가야한다. –

    관련 문제