이번엔 php에서 pgsql 관련 함수 중
pg_escape_string()
pg_escape_literal()
에 대해 설명할 것이다.
DB를 사용하는데 이 개념을 모른다면 이 글을 꼭 보아야 할 것이다.
php 코드로 다음 예시를 보자.
$a = "i said 'you' are great";
$b = "you too";
$qurey = "INSERT INTO table_name(a, b) VALUES(" '$a' , '$b' ")";
이러면 에러가 나는 것이다.
왜냐면.. $a가 치환되면서 'i said 'you' are great' 이 되어 버린다...
같이 '로 묶여야 할 you가 붕 떠버리는 것이다.
그래서 나온 일반적인 해결책이 Escape 이다.
뭐냐면, 따옴표 앞에 \를 붙이자는 것이다. 그럼
'i said \'you\' are great' 가 된다. 이걸 escape라고 부르는 것 같다.
이 기능을 하는 것이 php에서 제공하는 addslashes() 함수이다.
PHP 문서를 읽어 보니, 이러면 DB에 들어갈 때 \를 지워준다고 써있긴 하다.
만약 안 지워준다면 불러올 때 stripslashes()를 사용하여 지워 주면 된다.
PostgreSQL에서는?
pg_escape_string 함수를 사용하면
'i said ''you'' are great' 가 된다. 따옴표 2개짜리로 변하는 것이다.
그리고 이것을 DB에 넣으면 ''를 하나로 바꿔준다.
그래서 다시 불러올 땐 정상적인 데이터를 불러오게 된다.
.
.
pg_escape_string 함수를 사용하면 다음과 같이 된다.
$a = "'pg_escape_string($a)'" --> 'i said ''you'' are great'
.
pg_escape_literal 함수를 사용하면 굳이 직접 따옴표를 안 써줘도 마지막에 알아서 묶어준다.
음... 그런데 이 작업들이 좀 귀찮다... 왜냐면.. 한 항목 당 하나씩 해야 한다. 예를 들면..
$a = pg_escape_string("i said 'you' are great");
$b = pg_escape_string("you 'to'o");
$qurey = "INSERT INTO table_name(a, b) VALUES(" '$a', '$b' ")";
이럴 때 사용하면 좋은 게
array_map() 함수이다.
PHP문서 URL : http://php.net/manual/kr/function.array-map.php
php 문서를 보면 쉽게 알 수 있을 것이다. 무슨 짓을 하려는지.
위의 코드를 보면, callback함수로 cube()를 넣고 $n인자에 $a를 넣어서 배열 $a 내의 원소들을 다 cube함수로 돌리고,
결과를 배열로 반환해준다.
이런 식? 으로. 함수 여러번 안 써도 되는 것..
이걸 이용해서 항목 당 일일이 escape 함수를 사용하는 일이 없도록...
하면 깔끔하고 보기좋고 그렇다..
히히
'DB > PostgreSQL' 카테고리의 다른 글
[PGSQL] Column에 Default value 지정 (0) | 2016.09.14 |
---|---|
[PostgreSQL] 테이블 접근 권한 설정하기 : GRANT keyword (0) | 2016.08.10 |
[스크랩][PostgreSQL] ALTER 키워드 사용법 (0) | 2016.08.09 |
[스크랩][PostgreSQL] Intro (0) | 2016.08.09 |
[스크랩][PostgreSQL] postgresql data type 간략설명 (0) | 2016.08.09 |
[PostgreSQL] 칼럼 번호 자동 증가(Auto increase) (0) | 2016.08.09 |
[PostgreSQL] Select Query (0) | 2016.07.28 |
[PostgreSQL with PHP] Call to undefined function pg_connect (0) | 2016.07.11 |
[PostgreSQL] Insert with php (0) | 2016.07.11 |
[스크랩][PostgreSQL] PostgreSQL 소개 (0) | 2016.07.09 |