메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
30 그누보드5 검색최적화 방법입니다 file 2019.04.29 876
29 그누보드 확장변수 사용 2016.12.22 2634
28 그누보드 카카오톡 로그인 V2 플러그인 file 2021.03.24 289
27 그누보드 이력서 스킨 file 2021.03.24 151
26 게시판 스킨 파일 구조 2016.12.22 2342
25 게시판 스킨 목록 페이지에 이전 다음 페이지 링크 만들기 2017.04.12 1912
24 게시판 기본 스킨 목록 페이지 살펴보기 2 - 상세 설명 2017.04.13 2321
23 게시판 기본 스킨 목록 페이지 살펴보기 1 - list.skin.php 2017.04.13 2958
22 게시판 기본 스킨 내용보기 페이지 살펴보기 2 - 상세 설명 2017.04.13 2528
21 게시판 기본 스킨 글쓰기 페이지 살펴보기 2 - 상세 설명 2017.04.13 2916
20 게시판 기본 스킨 글쓰기 페이지 살펴보기 1 - write.skin.php 2017.04.13 2551
19 게시판 글쓰기 페이지에 스마트 에디터 2개 이상 사용하기 2017.04.12 2776
18 게시판 글쓰기 페이지에 다음 API 주소 입력기 사용하기 file 2017.04.12 3729
17 게시물 관리 기능을 업데이트 file 2024.04.09 0
16 style 수정시 서버에서 로딩되게 하기 2019.12.13 255
» sql 바인딩 그누보드에서 해보기 2024.04.09 0
14 NICE API 인증모듈 file 2024.04.09 1
13 mysql concat 날짜와 시간을 문자열로 합치기 시간의 크기 비교 2023.05.16 131
12 mov 업로드시 mp4 자동 변환 file 2024.04.09 0
11 jQuery 요소(elements) 미디어 컨버팅 플러그인 file 2019.12.13 320
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved