DB에 직접 sql 쿼리문을 PHP에서 작성하여 사용되는 서드파티들이 몇가지 있습니다.
그런 서드파티들이 아무래도 라이믹스 2.0에서 에러가 나는것 같습니다.
왜냐하면 라이믹스2.0에서는 $oDB 오브젝트 디비 인스턴스클래스에 Prefix 항목을 제거했기 때문입니다.
라이믹스 초기에는 XML쿼리를 제거하자는 큰 포부를 안고 진행해왔지만 포기했습니다.
XML쿼리가 보안이 탄탄하기에 이를 버리지말고 수정하기로 선택했기 때문입니다.
주소파라미터에 값을 받아와서 바로 디비쿼리에 넣는 형태
EX
도메인/index.php?act=member~~~&member_srl=4
$sql = "SELECT member_srl FROM {$oDB->prefix}member WHERE member_srl = {Context::get('member_srl')}";
이런 형태의 코드는 되도록이면 XE에서는 쓰지 마세요 (라이믹스포함). 위에서 넘어오는 member_srl 값을 아무리 잘 채크한다 해도 어떻게든 인젝션 어택이 들어가길 마련입니다. (이런 쿼리들 때문에 주소의 제일 마지막에 4대신에 0=0같은걸 넣으면 잘못하면 참사도 일어납니다.)
그리고 그외 비개발자로 활동하시는 분들께서 난감하시게 최근에 2.0 올라오면서 DB쪽에 변경이 많아서 뭔가 작동이 안되는 자료들이 좀 있는 것 같습니다.
위에서 언급했다 시피 라이믹스 2.0 부터는 prefix값이 누락되기 때문에 이 값을 추가해야합니다.
위의
$sql = "SELECT member_srl FROM {$oDB->prefix}member WHERE member_srl = {Context::get('member_srl')}";
를
$sql = "SELECT member_srl FROM member WHERE member_srl = {Context::get('member_srl')}";
으로 수정하시고
그 아랫줄에
$sql = $oDB->addPrefixes($sql);
를 붙여주세요.
이렇게하면 {$oDB->prefix} 를 알아서 잘 붙여줍니다.
그리고 개발자라면 XML쿼리 쓰세요! 두번쓰세요.
공식적으로 지원되지 않는 내부 함수를 사용해서
커스텀 쿼리를 실행하던 자료들이 이번에 다 뽀록나는군요.
참고로 저런 쿼리를 꼭 실행해야 할 경우
라이믹스 2.0에서 공!식!권!장!하는 방법은 아래와 같습니다.
$oDB = DB::getInstance();
$member_srl = intval(Context::get('member_srl'));
$query = $oDB->prepare('SELECT member_srl FROM member WHERE member_srl = ?');
$query->execute(array($member_srl));
$result = $query->fetchAll();
Prepared statement를 활용하지 않는 커스텀 쿼리는
차라리 실행되지 않고 에러나는 편이 사용자 입장에서 더 안전합니다.
그런 위험한 자료도 더이상 판매되지 말아야겠고요.