2016년 2월 14일 일요일

PHP MySQL 구문에 insert 할 때 작은 따옴표 (single quotation marks) 입력 처리

'씀: 일상적 글쓰기' 어플리케이션은 때때로 글이 저장되지 않는 오류가 있어왔다. 

여러가지 방법으로 해결해 보려 애썼지만 명확한 오류를 찾지 못했었다. 

오늘에서야 아주 기초적이고 간단한 오류 하나를 해결 함으로써 앞으로 글쓰기 저장 오류에서 큰 개선이 있을 것이라 기대해본다. 

그 기초적이고 간단한 원인은 
'PHP MySQL 구문에 insert 할 때 작은 따옴표 (single quotation marks) 입력 처리' 였다.

MySQL 에서 작은 따옴표는 문자열을 구분하는데 사용 되어 진다. 값에 작은 따옴표가 포함되어 있을 경우 쿼리문 속의 작은 따옴표들과 섞여 에러가 발생한다.

이를 해결하기 위해서는 작은 따옴표를 역슬레쉬와 함께 \' 이러한 형태로 사용해야 한다. 
입력 하려는  문장이 예를 들어 This is 'example'. 이라면 이 문장은 This is \'example\'. 과 같이 사용 되어야 에러가 발생하지 않는다. 

이때 addslashes() 함수를 사용하면 큰따옴표와 작은 따옴표와 같은 특정 특수 문자들에 \(역슬레쉬)를 붙여진 형태로 반환해 준다.

$example = addslashes($example); 

이렇게 변환하여 사용하게 되면 \(역슬래쉬)를 포함하여 쿼리문을 실행시키고 DB에 저장 될 때는 \가 지워진 형태로 저장된다.

(참고, stripslashes() 함수는 '\' 가 표기된 문자를 원래대로 되돌려 준다.)

댓글 1개: