메뉴 건너뛰기

조회 수 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 안쓰는 DHTML 에디터 이미지와 빈폴더 일괄삭제 file 2024.04.09 0
29 약간간단 주소복사 버튼 2024.04.09 0
28 엑셀파일 읽어서 바로 DB에 업로드하기 file 2024.04.09 2
27 여분필드 확장 후 write_update.skin.php file 2024.04.09 0
26 여분필드를 활용한 게시판 스킨 제작 - 기본적인 사용 방법 2017.04.13 2892
25 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-1 file 2017.04.13 3475
24 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-2 file 2017.04.13 4262
23 여분필드를 활용한 게시판 스킨 제작 - 기초 예제1-3 file 2017.04.13 3276
22 여분필드를 활용한 게시판 스킨 제작 - 여분 필드 10개 이상 사용하기 file 2017.04.12 2403
21 영카트5 DB 테이블별로 덤프하기 2019.04.29 864
20 외부 유입 검색어 나리야 사용가능 [뿡쁑님 자료] file 2024.04.09 0
19 우측 퀵메뉴 2019.12.13 382
18 웹상에서 PDF 뷰어 소스 (copyright 2021 Mozilla) file 2024.04.09 1
17 유튜브 동영상 시간체크 후 폼 전송하기 2024.04.09 0
16 유튜브 반응형 만들기 2024.04.09 0
15 이름 마지막 한자리 별표 처리 2019.12.13 326
14 이름이나 연락처 중간 부분을 *** 표시로 숨기기 file 2017.04.12 3063
13 이미지에 워터마크 넣기 2019.12.13 389
12 접속주소가 https로 되여 있는지 판단하여 $g5_path['url']를 수정하기 2024.04.09 8
11 카운트다운 스크립트 2019.12.13 318
Board Pagination Prev 1 2 3 4 Next
/ 4

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

© k2s0o1d4e0s2i1g5n. All Rights Reserved