2026, 새로운 도약을 시작합니다.

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

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

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

Copy
$sql = " select distinct avl_bo_table from g5__piree_770015_vote_list";	//echo "이야야아아아!!
";	$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로 출력시

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

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

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

답변 3개

^^ union은 막았구나... 처음 알았네요..

sql_query 이거 사용말고 별도로 sql 작업하면 되겠네요.. 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

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

하는 부분 주석.

Copy
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); 
로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

/lib/common.lib.php 파일 열어서

function sql_query(~~~

이렇게 된 거 찾아 보시면 union의 사용을 허락하지 않습니다라고 되어 있습니다. 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고