메뉴 건너뛰기

조회 수 0 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

바인딩을 하는 이유가 들어오는 파라메타의 보안 검사나 유효성 검사를 따로 해줄 수 있어서인 것 같은데요.
그래서 먼저 파라메타 보안 검사해주는 함수 만들어주고,
그리고

일반 실행 sql_run(쿼리,파라메타(값 또는 배열), 0)  마직막 인자 0 : 실행, 1 : insert_id 리턴, 2 : 영향준 행의 수 리턴

1줄 sql_row(쿼리,파라메타(값 또는 배열))

여러줄 sql_arr(쿼리,파라메타(값 또는 배열)) 
이렇게 함수를 만들고 쿼리문하고 파라메타를 각 넣어서 실행할 수 있게해 두었습니다.

common.lib.php에 넣어서 사용하시면 될 듯.


sql 쿼리문에 변수 매칭은 2가지 방식을 지원합니다. ? 나 $1,$2,$3 
파라메타에 단일 변수나 배열을 넣으면 순서대로 매칭됩니다.

?표는 ? 넣은 갯수 만큼 매칭이 되고
$1,$2,$3 이렇게 넣으면 배열의 순서를 지정해주는 방식으로

$1,$2,$3,$1 이렇게 $1를 여러번 넣어도 첫번째 값으로 인식합니다.

 

<?php
 
// SQL 인젝션 공격을 방지하기 위한 함수
// secure_input 함수
function secure_input($data) {
if (is_array($data)) {
foreach ($data as $key => $value) {
$data[$key] = secure_input($value);
}
} else {
$data = trim($data);
$data = stripslashes($data);
//$data = htmlspecialchars($data);
$data = htmlspecialchars($data, ENT_QUOTES);
$data = addslashes($data);
}
return $data;
}
 
// sql_run 함수
// params 배열의 값들을 안전하게 처리한 후, SQL 쿼리를 실행함
// insert delete update 를 처리하는 함수
// sql문에 ?를 사용하고, params에는 ?에 들어갈 값 또는 배열로 전달함
// sql문에 $1, $2, $3을 사용하고, params에는 $1, $2, $3에 들어갈 값들을 배열로 전달함
// sql_query 함수와 동일하게 작동하며, $return_val = 0 결과 리턴 1이면 insert_id 2이면 영향을 받은 행의 수를 리턴함
function sql_run($sql, $params, $return_val = 0) {
global $g5;
 
$params = secure_input($params);
//배열의 경우
if (is_array($params)) {
// $1, $2, $3 등을 $params의 값으로 대체
$sql = str_replace(array_map(function($k) { return '$' . ($k + 1); }, array_keys($params)), $params, $sql);
// ?를 $params의 값으로 대체
$sql = preg_replace_callback('/\?/', function($matches) use (&$params) {
return array_shift($params);
}, $sql);
}
// 단일 값의 경우
else {
$sql = str_replace("?", $params, $sql);
}
$result = sql_query($sql);
if($result) {
 
// $return_val가 1 마지막으로 삽입된 레코드의 ID를 가져옵니다.
if ($return_val == 1 ) {
$response = array('status' => 'success');
$response['insert_id'] = sql_insert_id($g5['connect_db']);
 
return $response;
// $return_val가 2 영향을 받은 행의 수를 가져옵니다.
} else if ($return_val == 2 ) {
$response = array('status' => 'success');
$response['affected_rows'] = sql_affected_rows($g5['connect_db']);
 
return $response;
} else {
return $result;
}
 
} else {
return $result;
}
}
 
// sql_row 함수
// sql select 1줄만 가져오는 함수
function sql_row($sql='', $params) {
$params = secure_input($params);
//배열의 경우
if (is_array($params)) {
// $1, $2, $3 등을 $params의 값으로 대체
$sql = str_replace(array_map(function($k) { return '$' . ($k + 1); }, array_keys($params)), $params, $sql);
// ?를 $params의 값으로 대체
$sql = preg_replace_callback('/\?/', function($matches) use (&$params) {
return array_shift($params);
}, $sql);
}
// 단일 값의 경우
else {
$sql = str_replace("?", $params, $sql);
}
$result = sql_fetch($sql);
return $result;
}
 
// sql_arr 함수
// sql select 결과를 배열로 가져오는 함수
function sql_arr($sql, $params) {
$params = secure_input($params);
//배열의 경우
if (is_array($params)) {
// $1, $2, $3 등을 $params의 값으로 대체
$sql = str_replace(array_map(function($k) { return '$' . ($k + 1); }, array_keys($params)), $params, $sql);
// ?를 $params의 값으로 대체
$sql = preg_replace_callback('/\?/', function($matches) use (&$params) {
return array_shift($params);
}, $sql);
}
// 단일 값의 경우
else {
$sql = str_replace("?", $params, $sql);
}
$rows = array();
$result = sql_query($sql);
while ($row = sql_fetch_array($result)) {
$rows[] = $row;
}
return $rows;
}


 


List of Articles
번호 제목 날짜 조회 수
70 DatePicker 달력 플러그인을 활용한 날짜 입력 쉽게하기 file 2017.04.12 4611
69 다음날 00시에 쿠키 만료되도록 하는 방법 2014.02.27 4411
68 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-2 file 2017.04.13 4262
67 게시판 글쓰기 페이지에 다음 API 주소 입력기 사용하기 file 2017.04.12 3729
66 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-1 file 2017.04.13 3475
65 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-3 file 2017.04.13 3276
64 이름이나 연락처 중간 부분을 *** 표시로 숨기기 file 2017.04.12 3063
63 게시판 기본 스킨 목록 페이지 살펴보기 1 - list.skin.php 2017.04.13 2959
62 게시판 기본 스킨 글쓰기 페이지 살펴보기 2 - 상세 설명 2017.04.13 2916
61 여분필드를 활용한 게시판 스킨 제작 - 기본적인 사용 방법 2017.04.13 2892
60 게시판 글쓰기 페이지에 스마트 에디터 2개 이상 사용하기 2017.04.12 2776
59 DatePicker 달력 플러그인을 활용한 날짜 입력 쉽게하기 file 2017.04.12 2761
58 그누보드 확장변수 사용 2016.12.22 2634
57 게시판 기본 스킨 글쓰기 페이지 살펴보기 1 - write.skin.php 2017.04.13 2551
56 게시판 기본 스킨 내용보기 페이지 살펴보기 2 - 상세 설명 2017.04.13 2528
55 여분필드를 활용한 게시판 스킨 제작 - 여분 필드 10개 이상 사용하기 file 2017.04.12 2403
54 게시판 스킨 파일 구조 2016.12.22 2343
53 게시판 기본 스킨 목록 페이지 살펴보기 2 - 상세 설명 2017.04.13 2321
52 배열을 사용해서 여분필드 한 개로 연락처 입력란 3등분하기 file 2017.04.12 2292
51 게시판 스킨 목록 페이지에 이전 다음 페이지 링크 만들기 2017.04.12 1912
Board Pagination Prev 1 2 3 4 Next
/ 4

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved