PHP addslashes() 작은따옴표 ' 자료 insert 하기
페이지 정보
본문
텍스트 입력에서 작은따옴표 (어퍼스트로피)를 저장할때 오류 해결방법
테이블구성이 name,email,title 이고 primary key가 name일때
name에 '(작은따옴표)를 넣고 db에 저장할 때
$name=addslashes($name) 으로 저장하면 db에 저장이 됩니다.
DB 작업을 하기 위해서 쿼리를 작성하게 되는데, 이때 DB 시스템은 작은따옴표 ' 와 큰따옴표 " 그리고 백슬래시 / 그리고, NULL byte 를 문자열을 구분하는 등의 기준으로 이용하게 됩니다.
그런데, 하나의 문자열 안에 따옴표가 들어가 있게되면, 예상치 못하게 오류가 발생하게 됩니다.
그래서, 문자열을 데이터베이스에 저장할 수 있는 포맷으로 변화시켜줄 필요가 있습니다.
방법 1. 홑따옴표를 하나 추가
쿼리문 작성시 홑따옴표를 넣을때 에러가 발생합니다.
그럴때는 홑따옴표 앞에 홑따옴표를 하나 더 추가 해주면 됩니다.
$sql = " insert into 테이블 ( aaa, bbb ) VALUES( 'hello', 'I''m boy' ) ";
I'm boy => I''m boy
방법 2.
mysql 에 저장된 ' 가 포함된 컬럼의 값을 가져와서 다시 insert 할때
$row['title'] = I'm boy;
$ca_name = str_replace("'","''",$row['title']);
$sql = " insert into 테이블 (aaa, bbb)
방법3. addslashes 활용하기
I'm a boy 를 문자열로 지정해서 'I'm a boy' 이렇게 쿼리로 전송되게 되면, I 뒤의 작은 따옴표 때문에 오류가 발생하게 됩니다.
그래서, 내부에 위치하게 될 따옴표들을 기준을 가지고 다르게 표현을 해 줘야합니다.
흔히들 이스케이프(escape) 시킨다...라고 표현하는데요.
I\'m a boy 로 바꾸어 주는 작업을 말합니다.
그 작업을 해주는 함수가 아래의 addslashes() 함수입니다.
string addslashes ( string $str )
그럼, DB에서 다시 꺼내왔을 때는 추가됐던 백슬래쉬를 제거를 해줘야 원래의 문자열이 되겠지요?
추가됐던 백슬래쉬를 제거해주는 함수가 아래의 stripslashes() 입니다.
string stripslashes ( string $str )
근데, 이 작업을 자동으로 해주도록 PHP 를 설정하는 방법이 있습니다.
magic_quotes_gpc 라고 합니다.
GET, POST, COOKIE 를 통해 넘어오는 값들에 대해서 자동으로 이스케이프 시켜주는 기능입니다.
PHP 의 설정값이라, 우리가 php 파일내에서 임의로 세팅을 해 줄 수는 없습니다.
서버 관리자가 PHP를 설치할 때, 혹은 이후 설정을 하게 됩니다.
그럼, 현재 저 매직 쿼트 지피시 가 설정되어 있는지를 알아내는 함수가 있겠지요?
bool get_magic_quotes_gpc ( void )
이 함수가 FALSE을 리턴하면, 설정이 되어있지 않다는 뜻입니다.
참고자료
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=184572
http://zzaps.tistory.com/45
https://huskdoll.tistory.com/442
테이블구성이 name,email,title 이고 primary key가 name일때
name에 '(작은따옴표)를 넣고 db에 저장할 때
$name=addslashes($name) 으로 저장하면 db에 저장이 됩니다.
DB 작업을 하기 위해서 쿼리를 작성하게 되는데, 이때 DB 시스템은 작은따옴표 ' 와 큰따옴표 " 그리고 백슬래시 / 그리고, NULL byte 를 문자열을 구분하는 등의 기준으로 이용하게 됩니다.
그런데, 하나의 문자열 안에 따옴표가 들어가 있게되면, 예상치 못하게 오류가 발생하게 됩니다.
그래서, 문자열을 데이터베이스에 저장할 수 있는 포맷으로 변화시켜줄 필요가 있습니다.
방법 1. 홑따옴표를 하나 추가
쿼리문 작성시 홑따옴표를 넣을때 에러가 발생합니다.
그럴때는 홑따옴표 앞에 홑따옴표를 하나 더 추가 해주면 됩니다.
$sql = " insert into 테이블 ( aaa, bbb ) VALUES( 'hello', 'I''m boy' ) ";
I'm boy => I''m boy
방법 2.
mysql 에 저장된 ' 가 포함된 컬럼의 값을 가져와서 다시 insert 할때
$row['title'] = I'm boy;
$ca_name = str_replace("'","''",$row['title']);
$sql = " insert into 테이블 (aaa, bbb)
방법3. addslashes 활용하기
I'm a boy 를 문자열로 지정해서 'I'm a boy' 이렇게 쿼리로 전송되게 되면, I 뒤의 작은 따옴표 때문에 오류가 발생하게 됩니다.
그래서, 내부에 위치하게 될 따옴표들을 기준을 가지고 다르게 표현을 해 줘야합니다.
흔히들 이스케이프(escape) 시킨다...라고 표현하는데요.
I\'m a boy 로 바꾸어 주는 작업을 말합니다.
그 작업을 해주는 함수가 아래의 addslashes() 함수입니다.
string addslashes ( string $str )
그럼, DB에서 다시 꺼내왔을 때는 추가됐던 백슬래쉬를 제거를 해줘야 원래의 문자열이 되겠지요?
추가됐던 백슬래쉬를 제거해주는 함수가 아래의 stripslashes() 입니다.
string stripslashes ( string $str )
근데, 이 작업을 자동으로 해주도록 PHP 를 설정하는 방법이 있습니다.
magic_quotes_gpc 라고 합니다.
GET, POST, COOKIE 를 통해 넘어오는 값들에 대해서 자동으로 이스케이프 시켜주는 기능입니다.
PHP 의 설정값이라, 우리가 php 파일내에서 임의로 세팅을 해 줄 수는 없습니다.
서버 관리자가 PHP를 설치할 때, 혹은 이후 설정을 하게 됩니다.
그럼, 현재 저 매직 쿼트 지피시 가 설정되어 있는지를 알아내는 함수가 있겠지요?
bool get_magic_quotes_gpc ( void )
이 함수가 FALSE을 리턴하면, 설정이 되어있지 않다는 뜻입니다.
참고자료
http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_db&wr_id=184572
http://zzaps.tistory.com/45
https://huskdoll.tistory.com/442
댓글목록
등록된 댓글이 없습니다.