포럼
XML 쿼리 에러인데 뭐가 문제인지 잘 모르겠네요..
2014.02.16 21:52
묻고답하기에도 올린 내용인데, 모듈 개발 관련된 내용이기도 하고 다른분들도 이런 문제를 겪어 보셨거나 겪어보시지 않을까 싶어 여기에도 올려봅니다.
작성한 XML쿼리
1 2 3 4 5 6 7 8 9 10 11 | < query id = "updateMcNick" action = "update" > < tables > < table name = "member" /> </ tables > < columns > < column name = "mcnick" var = "mcnick" notnull = "notnull" /> </ columns > < conditions > < condition operation = "equal" column = "member_srl" var = "member_srl" notnull = "notnull" filter = "number" /> </ conditions > </ query > |
PHP에서 실행하는 코드
1 2 3 4 5 6 7 8 9 | $obj ->mcnick = $_SESSION [ 'mcnick' ]; $output = executeQuery( "mcplus.updateMcNick" , $obj ); if ( $output ->toBool()){ unset( $_SESSION [ "mcnick" ]); return new Object(); } else { return $output ; } |
에러 내용
DB에 넣는 값이 전부 ?로 바뀌어 있는데 저번부터 이런 현상이 많이 발생하던데.. 무슨 문제일까요?
댓글 22
-
식쵸
2014.02.16 21:59
-
executeQuery 함수에서 저 쿼리일때 변수 전달이 됬는지 확인해보았는데 잘 전달 되었습니다.
자세히 말하자면
./classes/db/DB.class.php 파일의 function executeQuery($query_id, $args = NULL, $arg_columns = NULL) 에서
if($query_id == "mcplus.updateMcNick"){
return new Object(-1, $args->mcnick);
}
이런식으로 했을때, 잘 출력되었습니다.
-
$_SESSION
[
'mcnick'
];
요게 의심 스럽네요.
-
그 부분 데이터는 잘 나오는것 같아요 ㅠㅠ
-
투씨
2014.02.17 00:51
혹시 DB 종류가 바뀌었나요?...
-
DB종류는 예전부터 계속 MySQL을 사용중입니다.
-
투씨
2014.02.17 22:16
그런데 오류 메세지에서는 "mysqli_stmt" 이렇게 뜨는군요...
-
mysqli도 MyISQL 함수 아닌가요?
-
투씨
2014.02.17 22:29
저도 mysql로 사용하다가 mysqli로 바꿔봤을 때 저런 비슷한 오류를 본적이 있어서요.
쿼리 형식이 약간 달라서 그럴거라고 짐작만 하고 다시 mysql로 돌린적이 있었습니다.
-
그런데, 저 문제는 제가 개발하고 있는 모듈에서만 나타나지 다른 모듈에서는 나타나지 않는 문제라서요..
DB가 바뀌어서 그런거라면 다른부분에서도 다 문제가 나야 하는거 아닌가요?
-
투씨
2014.02.17 22:32
글쎄요, 그렇긴 합니다만.. 혹시 모르니 참고로만 해주세요.
저도 자세한 건 직접 체험해봐야 알 수 있을듯 하네요.
-
해당 테이블의 schema 에 지금 입력하려는 칼럼들이 제대로 다 설정되어있는지 확인해보세요
-
obid는 module update 부분에서 추가하도록 했고, phpmyadmin으로도 잘 나와 있었습니다.
module_srl은 기본으로 있는 부분이구요.
123456function
checkUpdate(){
// 생략
$oDB
= &DB::getInstance();
if
(!
$oDB
->isColumnExists(
"member"
,
"mcnick"
))
return
true;
// 생략
}
1234567function
moduleUpdate(){
// 생략
$oDB
= &DB::getInstance();
if
(!
$oDB
->isColumnExists(
"member"
,
"mcnick"
))
$oDB
->addColumn(
"member"
,
"mcnick"
,
"varchar"
,
"128"
);
// 생략
return
new
Object(0,
'success_updated'
);
}
-
class 의 update 기능을 통해, 테이블내에 칼럼을 생성하더라도
schema 파일에 해당 항목이 설정이 안 되어있으면
실제 값이 등록되지 않는 경우가 있습니다. (어찌보면 버그 같은거죠. 보고한적도 있는데 아직까지는..)
특히 추가하는 칼럼의 값이 문자열이면 무조건 schema 에 추가해줘야할겁니다.
숫자의 경우 schema 추가 없이 update 만으로도 되는데, 가끔 이것도 안 될때가 있더군요. 그럴땐 schema 에 추가하고
캐시파일 재생성하면 되는 경우가 있더군요.
-
그러면 ./modules/member/schemas/member.xml을 수정해야 하는건가요?
멤버모듈을 수정하지 않고는 방법이 없는걸까요?
-
KANTSOFT
2014.02.18 10:35
xe xml쿼리사용하려면 먼저 schemas에 각테이블에 해당 컬럼이 있어야 합니다. xe_member테이블에 웹엔진님이 생성하신 컬럼이 schemas/member.xml 파일안에 해당 컬럼이 같이 정의가 되어야만 xml쿼리가 올바르게 동작하더군요.
-
sho
2014.02.18 18:02
member.xml 에 mcnick 을 추가해서 하면 될것 같은데요.
테이블에 mcnick 이라는 필드가 없어서 쿼리를 직접 작성해서 테스트 해본다 해도 오류나는 쿼리 아닌가요??
-
쿼리 직접 작성해서 하면 잘 됩니다. ^^
실제 테이블에는 들어가 있지만 XE의 XML에는 추가가 되어 있지 않아 생기는 오류였습니다.
-
KANTSOFT
2014.02.17 10:39
debugPrint(); 로 좀 더 정확한 값들이 안에 있는지와 어떤부분이 오류인지 알아보셔야 할듯하네요.
각 지점마다 디버깅을 해보는 수밖에 없음..
아니면 sejin님처럼 스키마가 있어야 해당 컬럼을 인식하는데.. 지금 봐서는 컬럼보단 값에 대한 문제점인듯하네요.
-
12345
$args
->mcnick =
$_SESSION
[
'mcnick'
];
$args
->member_srl =
$obj
->member_srl;
debugPrint(
$args
);
$output
= executeQuery(
"mcplus.updateMcNick"
,
$args
);
debugPrint(
$output
);
- 결과/*========================================[2014-02-17 22:28:05 mobileplus.controller.php:45] - mem(2.19MB)stdClass Object([mcnick] => 1241gsd[member_srl] => 205)----------------------------------------*//*========================================[2014-02-17 22:28:05 mobileplus.controller.php:47] - mem(2.20MB)Object Object([error] => -1[message] => Prepared statement failed: UPDATE `xe_member` as `member` SET `mcnick` = ? WHERE `member_srl` = ?Array([0] => mysqli_stmt Object([affected_rows] => -1[insert_id] => 0[num_rows] => 0[param_count] => 2[field_count] => 0[errno] => 2031[error] => No data supplied for parameters in prepared statement[sqlstate] => HY000[id] => 34)[1] => i[2] => 205)[variables] => Array([_query] => UPDATE `xe_member` as `member` SET `mcnick` = ? WHERE `member_srl` = ?[_elapsed_time] => 0.00104)[httpStatusCode] =>)----------------------------------------*/값을 넣은건 제대로 넣은거 같은데.. -
독립 모듈로 만들려고 했던터라 그냥 새로운 테이블을 하나 만들어서 제작했습니다. ^^
도움주신분들 모두 감사드립니다. ^^
-
이문제때문에 식겁했는데 저도 보고 해결책 얻어갑니다!
mcnick, member_srl같은 특정 변수에 물음표가 떴단 건 변환 과정에서 제대로 인식을 못했다는 걸텐데. 변수 값이 제대로 전달이 안 돼서 그런 거 아닐까요?