포럼
XML 쿼리 에러인데 뭐가 문제인지 잘 모르겠네요..
2014.02.16 21:52
묻고답하기에도 올린 내용인데, 모듈 개발 관련된 내용이기도 하고 다른분들도 이런 문제를 겪어 보셨거나 겪어보시지 않을까 싶어 여기에도 올려봅니다.
작성한 XML쿼리
<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에서 실행하는 코드
$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
-
웹엔진
2014.02.16 22:33
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);
}
이런식으로 했을때, 잘 출력되었습니다.
-
푸시아
2014.02.16 22:06
$_SESSION
[
'mcnick'
];
요게 의심 스럽네요.
-
웹엔진
2014.02.16 22:33
그 부분 데이터는 잘 나오는것 같아요 ㅠㅠ
-
투씨
2014.02.17 00:51
혹시 DB 종류가 바뀌었나요?...
-
웹엔진
2014.02.17 22:11
DB종류는 예전부터 계속 MySQL을 사용중입니다.
-
투씨
2014.02.17 22:16
그런데 오류 메세지에서는 "mysqli_stmt" 이렇게 뜨는군요...
-
웹엔진
2014.02.17 22:20
mysqli도 MyISQL 함수 아닌가요?
-
투씨
2014.02.17 22:29
저도 mysql로 사용하다가 mysqli로 바꿔봤을 때 저런 비슷한 오류를 본적이 있어서요.
쿼리 형식이 약간 달라서 그럴거라고 짐작만 하고 다시 mysql로 돌린적이 있었습니다.
-
웹엔진
2014.02.17 22:30
그런데, 저 문제는 제가 개발하고 있는 모듈에서만 나타나지 다른 모듈에서는 나타나지 않는 문제라서요..
DB가 바뀌어서 그런거라면 다른부분에서도 다 문제가 나야 하는거 아닌가요?
-
투씨
2014.02.17 22:32
글쎄요, 그렇긴 합니다만.. 혹시 모르니 참고로만 해주세요.
저도 자세한 건 직접 체험해봐야 알 수 있을듯 하네요.
-
sejin7940
2014.02.17 10:08
해당 테이블의 schema 에 지금 입력하려는 칼럼들이 제대로 다 설정되어있는지 확인해보세요
-
웹엔진
2014.02.17 22:10
obid는 module update 부분에서 추가하도록 했고, phpmyadmin으로도 잘 나와 있었습니다.
module_srl은 기본으로 있는 부분이구요.
function checkUpdate(){ // 생략 $oDB = &DB::getInstance(); if(!$oDB->isColumnExists("member", "mcnick")) return true; // 생략 }
function moduleUpdate(){ // 생략 $oDB = &DB::getInstance(); if(!$oDB->isColumnExists("member", "mcnick")) $oDB->addColumn("member", "mcnick", "varchar","128"); // 생략 return new Object(0, 'success_updated'); }
-
sejin7940
2014.02.18 01:08
class 의 update 기능을 통해, 테이블내에 칼럼을 생성하더라도
schema 파일에 해당 항목이 설정이 안 되어있으면
실제 값이 등록되지 않는 경우가 있습니다. (어찌보면 버그 같은거죠. 보고한적도 있는데 아직까지는..)
특히 추가하는 칼럼의 값이 문자열이면 무조건 schema 에 추가해줘야할겁니다.
숫자의 경우 schema 추가 없이 update 만으로도 되는데, 가끔 이것도 안 될때가 있더군요. 그럴땐 schema 에 추가하고
캐시파일 재생성하면 되는 경우가 있더군요.
-
웹엔진
2014.02.18 02:43
그러면 ./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 이라는 필드가 없어서 쿼리를 직접 작성해서 테스트 해본다 해도 오류나는 쿼리 아닌가요??
-
웹엔진
2014.02.19 02:39
쿼리 직접 작성해서 하면 잘 됩니다. ^^
실제 테이블에는 들어가 있지만 XE의 XML에는 추가가 되어 있지 않아 생기는 오류였습니다.
-
KANTSOFT
2014.02.17 10:39
debugPrint(); 로 좀 더 정확한 값들이 안에 있는지와 어떤부분이 오류인지 알아보셔야 할듯하네요.
각 지점마다 디버깅을 해보는 수밖에 없음..
아니면 sejin님처럼 스키마가 있어야 해당 컬럼을 인식하는데.. 지금 봐서는 컬럼보단 값에 대한 문제점인듯하네요.
-
웹엔진
2014.02.17 22:36
$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] =>)----------------------------------------*/값을 넣은건 제대로 넣은거 같은데.. -
웹엔진
2014.02.19 02:40
독립 모듈로 만들려고 했던터라 그냥 새로운 테이블을 하나 만들어서 제작했습니다. ^^
도움주신분들 모두 감사드립니다. ^^
-
gu
2014.06.03 18:23
이문제때문에 식겁했는데 저도 보고 해결책 얻어갑니다!
mcnick, member_srl같은 특정 변수에 물음표가 떴단 건 변환 과정에서 제대로 인식을 못했다는 걸텐데. 변수 값이 제대로 전달이 안 돼서 그런 거 아닐까요?