mysql 프로그램에서는 되는 쿼리가 sql_query()로는 작동하지 않음.

mysql 프로그램에서는 되는 쿼리가 sql_query()로는 작동하지 않음.

QA

mysql 프로그램에서는 되는 쿼리가 sql_query()로는 작동하지 않음.

본문

group.php에 piree 투표들에 대해서 카테고리를 합쳐서 보여주기 위해 아래와 같은 코드를

작성했습니다. 쿼리문은 $sql, $sql2 두 개를 썼는데 $sql은 작동하는데 $sql2는 작동하지 않습니다.

 


$sql = " select distinct avl_bo_table from g5__piree_770015_vote_list";
	//echo "이야야아아아!!<br/>";
	$result= sql_query($sql); 
$sql = "select * from (";
	while($rowss = sql_fetch_array($result)){
		//print_r($rowss);
		$sql .=" select a.*,b.ca_name from `g5__piree_770015_vote_list` as a left join";
		$sql .=" `g5_write_{$rowss['avl_bo_table']}` as b on (a.avl_wr_id= b.wr_id)";
		$sql .=" where ca_name is not null and ca_name !=''";
		$sql .=" union all ";	
	}
	$sql = substr($sql, 0, -10 ); //맨마지막에 붙는 union all 삭제.
 
	$sql .= ")";
	
 
	if($stx!=''){
		$sql .= " where INSTR(LOWER(avl_title_s), LOWER('$stx'))";
	}
	$sql .=" as t order by ca_name, avl_n desc";
	$sql2 = $sql;
	/*SELECT * FROM (
	SELECT avl_n, avl_bo_table,avl_wr_id,ca_name,avl_title_s  FROM g5__piree_770015_vote_list AS a
	LEFT  JOIN  g5_write_free_board4 AS b  ON (a.avl_wr_id = b.wr_id AND avl_bo_table = 'free_board4')
	WHERE ca_name IS NOT NULL AND ca_name != ''
	UNION ALL
	SELECT avl_n, avl_bo_table,avl_wr_id,ca_name,avl_title_s  FROM g5__piree_770015_vote_list AS a
	LEFT  JOIN  g5_write_free_board5 AS b  ON (a.avl_wr_id = b.wr_id AND avl_bo_table = 'free_board5')
	WHERE ca_name IS NOT NULL AND ca_name != ''
	) AS t 
	 ORDER BY ca_name*/
	$result2 = sql_query($sql2);
print_r($result2);
 

 

쿼리문 sql2를 다른 sql 프로그램(sqlyog 사용중입니다)에서는 정상적으로 결과를 출력하는데

group.php 내부에서는 $sql에 의한 쿼리 결과 $result만 정상적으로 받아지고, 

$sql2에 의한 쿼리결과 $result2에는 print_r로 출력시


mysqli_result Object ( [current_field] => 0 [field_count] => 1 [lengths] => [num_rows] => 1 [type] => 0 ) 

이와 같은 결과만 나옵니다.

 

어떻게 해야할까요 조언 부탁드립니다.

이 질문에 댓글 쓰기 :

답변 3

lib/common.lib.php 파일의 1470번째줄쯤의 function sql_query에서 union 사용허락하지 않습니다

하는 부분 주석.


function sql_query($sql, $error=G5_DISPLAY_SQL_ERROR, $link=null)
{
    global $g5;
 
    if(!$link)
        $link = $g5['connect_db'];
 
    // Blind SQL Injection 취약점 해결
    $sql = trim($sql);
    // union의 사용을 허락하지 않습니다.
    //$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
    //이 줄 아래의 문장을 아래와 같이 주석처리하면 됩니다.
    //$sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql);
    // `information_schema` DB로의 접근을 허락하지 않습니다.
    $sql = preg_replace("#^select.*from.*where.*`?information_schema`?.*#i", "select 1", $sql);
 
답변을 작성하시기 전에 로그인 해주세요.
전체 728
QA 내용 검색
filter #sql ×

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT