포럼
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
MYSQL로 XML Update쿼리에서 문제점
2015.01.07 17:49
XE에서 XML Query를 이용한 Update 시의 버그(?) 문제 점(?) 입니다.
원래대로라면 MySQL Query의 문법 중 `Column` = 'DATA' 로 표현하게 되는데
신기하게도 XE에서는 특정 칼럼을 업데이트 시킬 때
숫자일 경우엔 Parser(구분자)가 없고, 문자일 때는 ``구분자를 넣은 희안한 버그가 있더군요.
<table name="auth"> <column name="uid" type="number" size="11" notnull="notnull" primary_key="primary_key" /> <column name="color" type="varchar" size="6" /> </table>
<query id="updateAuthData" action="update"> <tables> <table name="auth" /> </tables> <conditions> <condition operation="equal" column="uid" var="uid" /> </conditions> <columns> <column name="color" var="color" /> </columns> </query>
$args = new stdClass();
$args->uid = $member_srl;
$args->color = $color;
$output = executeQuery("omdoll.updateAuthData", $args);UPDATE `pvpgn_auth` as `auth` SET `color` = `6b0000` WHERE `uid` = 2838888
ERROR : 'Unknown column \'6b0000\' in \'field list\''
언듯 다른 문서에서도 이 문제 점 때문에 골머리를 앓고있다고 보았습니다만, 아직도 수정되지 않은 상황이네요.
구분자로 처리하는 이유가 보안상의 문제가 있어서 그런건가요?
$query->setPriority(""); if (isset($args->color)) { ${'color1_argument'} = new Argument('color', $args->{'color'}); if (!${'color1_argument'}->isValid()) return ${'color1_argument'}->getErrorMessage(); } else ${'color1_argument'} = NULL; if (${'color1_argument'} !== null) ${'color1_argument'}->setColumnType('char'); // 이부분 추가 if (isset($args->uid)) { ${'uid2_argument'} = new ConditionArgument('uid', $args->uid, 'equal'); ${'uid2_argument'}->createConditionValue(); if (!${'uid2_argument'}->isValid()) return ${'uid2_argument'}->getErrorMessage(); } else ${'uid2_argument'} = NULL; if (${'uid2_argument'} !== null) ${'uid2_argument'}->setColumnType('number');사이에
if(${'color1_argument'} !== null) ${'color1_argument'}->setColumnType('char');구문을 추가해주니까 작동합니다.
그러나 캐시파일 재생성 한다면 날라가겠죠?
Schemas에 정의 되어있고, 데이터로 string으로 넘기는데 굳이 번거롭게 ColumnType을 지정해줘야 하는건지 의문이네욤.
근본적인 해결방법을 아직 못찾았습니다.