메뉴 건너뛰기

조회 수 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
번호 제목 날짜 조회 수
50 영카트5 DB 테이블별로 덤프하기 2019.04.29 864
49 그누보드5 검색최적화 방법입니다 file 2019.04.29 876
48 쉽고 간편한 인쇄 팁 file 2019.04.29 743
47 특정 게시판에서 이미지 파일만 업로드 허용하기 file 2019.12.09 367
46 우측 퀵메뉴 2019.12.13 382
45 style 수정시 서버에서 로딩되게 하기 2019.12.13 255
44 이미지에 워터마크 넣기 2019.12.13 389
43 iframe 금지된 사이트 iframe 으로 불러오기 2019.12.13 385
42 글 작성시 랜덤형 자동 댓글로 인사 멘트남기기 2019.12.13 323
41 jQuery 요소(elements) 미디어 컨버팅 플러그인 file 2019.12.13 320
40 이름 마지막 한자리 별표 처리 2019.12.13 326
39 카운트다운 스크립트 2019.12.13 317
38 네이버 밴드 글 가져오기 2019.12.13 485
37 회원 목록을 select 로 불러와서 선택시 input 에 집어넣기 file 2019.12.13 588
36 링크 클릭시 특정영역에 페이지 불러오기 (아이프레임X) 2019.12.13 1225
35 '정상적으로 로그인하여 접근하시기 바랍니다.' 해결 방법 file 2020.12.09 427
34 회원 등급(권한)에 따라서 다른 메시지 보이기 2021.03.24 146
33 그누보드 카카오톡 로그인 V2 플러그인 file 2021.03.24 290
32 fullcalendar 달력 게시판 스킨 file 2021.03.24 363
31 그누보드 이력서 스킨 file 2021.03.24 151
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved