묻고답하기
xml 쿼리문 사용법.. 저녁내내 봐도 이해가 안가네요 도움 간절히 부탁드립니다..
2009.08.24 09:33
저기 밑에 http://www.xpressengine.com/qna/18249425 <- 이 질문글 올렸던 사람입니다
간단히 내용을 요약한다면..
어떤 사람이 회원가입을 할때 회원테이블에 값을 입력하잖습니까.
근데 이것 외에 별도의 테이블 1개에도 가입할때 입력한 아이디값하고 어떤 특정한
변수값(쿠키하나) 을 기록을 할려고 합니다.
뭐 그런 질문인데요..
xe는 구조상 sql문이 직접 사용되지 않고 xml문서를 끌어오잖습니까. 다양한 dbms를 위해.. 뭐 이해는 됩니다만
제가 솔직히 초보이고.. xml 쿼리문 사용법을 저녁내내 연구해봐도 정말 잘 모르겠네요..
아는 분 입장에서야 쉬어보일 수 있지만 모른 초보입장에서는 정말 난관이네요..
메뉴얼을 아무리 봐도 저에겐 부족한 설명입니다. 그 외에 갖은 사이트에서 검색해보고 해봐도..
아직은 어렵네요.. 제가 워낙 xml에 기초가 없어서 그런걸까요
저 링크에서도 적었지만 그냥 원초적인 방법으로 했으면 좋겠다는 생각이 자꾸 드네요..
insert into 테이블.. 이렇게 그냥 쿼리문 하나 날리는거요..
저는 xml쿼리문 수정하는것보다 저렇게 하는게 훨씬 쉽거든요 지금 상황에서는요
재차 조언 부탁드리오며 (어떤 파일 어느 위치에 저 원초적인 쿼리문을 적으면 되는지만 알려주시면 됩니다 )
p.s 그리고 혹시 xml쿼리문을 수정하는 법을 알려주실 수 있다면...
회원테이블에 입력하는 아래 xml쿼리문 에서 어떻게 수정해야되는지 좀 자세히 부탁드리겠습니다...
입력하려고 하는 새로운 테이블명은 "xe_text" 이며
참조할 값은 위에서 말씀드린대로 입력할때 기재한 아이디값(user_id)와
임의의 쿠키값 하나(cookie_test) 이라고 가정해봅니다..
어려워 보이지 않으시다면.. 그리고 가능하시면 적어주시면 참으로 감사드리겠습니다...
제가 날로 먹으려는 것처럼 보일 수 있다면 이해해 주시구요 지금 사정이 좀 그러네요
부탁드립니다
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡinsertMember.xml 파일ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
<query id="insertMember" action="insert">
<tables>
<table name="member" />
</tables>
<columns>
<column name="member_srl" var="member_srl" filter="number" notnull="notnull" />
<column name="user_id" var="user_id" filter="userid" notnull="notnull" />
<column name="email_address" var="email_address" filter="email" notnull="notnull" />
<column name="password" var="password" notnull="notnull" />
<column name="email_id" var="email_id" notnull="notnull" />
<column name="email_host" var="email_host" notnull="notnull" />
<column name="user_name" var="user_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="nick_name" var="nick_name" notnull="notnull" minlength="1" maxlength="40" />
<column name="homepage" var="homepage" />
<column name="blog" var="blog" />
<column name="birthday" var="birthday" />
<column name="allow_mailing" var="allow_mailing" default="Y" />
<column name="allow_message" var="allow_message" default="Y" />
<column name="denied" var="denied" default="N" />
<column name="limit_date" var="limit_date" />
<column name="regdate" var="regdate" default="curdate()" />
<column name="last_login" var="last_login" default="curdate()" />
<column name="is_admin" var="is_admin" default="N" />
<column name="description" var="description" />
<column name="extra_vars" var="extra_vars" />
</columns>
</query>
댓글 10
-
sol
2009.08.24 11:33
-
바이블인사이드
2009.08.24 14:17
제가 잠시 오해해서 글을 달았다가 금방 지웠습니다 덧글 감사드립니다.. ^^
-
khongchi
2009.08.24 14:10
<query id="insertText" action="insert">
<tables>
<table name="text" />
</tables>
<columns>
<column name="user_id" var="user_id" filter="userid" notnull="notnull" /><column name="cookie_test" var="cookie_test" notnull="notnull" />
</columns>
</query>쿼리를 해석해 보면
xe_text에 user_id, cookie_test라는 컬럼이 있고 두 컬럼은 null입력이 안되는 컬럼입니다.
주황색글씨의 insertText는 쿼리아이디이므로 다른것으로 지정하셔도 상관없구요.
필터는 입력되는 값의 형식을 지정해주는 것인데 userid같은 경우 영문자로시작하는 영문자/숫자로 구성된 형식과 같은 보통 아이디의 조건에 해당되며, 필터가 number라면 숫자만 입력할수 있다는 것입니다.
var는 .php에서 executeQuery()를 할때 넘겨주는 파라메터의 변수명이구요.
-
바이블인사이드
2009.08.24 14:26
먼저 자세한 답변 감사드리구요
2가지만 여쭤볼게요
1. 저 insertText.xml 파일을 어디서 어떻게 불러와야 되나요? (불러오는 소스를 어디에 적어야 되는지..
파일저장하는것은 queries 폴더에 하는건 알겠는데.. 쉘에서 "executeQuery(" 그렙 검색해보니
member.controller.php 파일 같기도 한데..
파일 내용중에
/**
* @brief member 테이블에 사용자 추가
**/
function insertMember(&$args, $password_is_hashed = false) {
// trigger 호출 (before)
$output = ModuleHandler::triggerCall('member.insertMember', 'before', $args);
if(!$output->toBool()) return $output;이런 내용이 있던데 저기에서 추가를 하는게 맞는건지.. 맞다면 어떤식으로 추가해야되는지..
2. 쿠키값을 column의 var 부분에 적는 부분에서요..
일단 쿠키값을 변수에 저장해서 저 xml파일 불러올때 값을 넘겨줘야 되는건지..
아니면 xml파일 내에서 php코드를 삽입할 수 있나요?
2개의 컬럼이라고 했는데.. 사실 가입날짜(시간포함) 한개 더 넣을려고 했거든요..
그럼 날짷마수 써서 변수에 넣어서 저 xml파일 불러올때 넘겨줘야 되는데.. 이 부분이 제일 막히는것 같네요..
이 두가지만 조언해주시면 감사드리겠습니다..
-
khongchi
2009.08.24 16:34
XE에서는 트리거를 따로 관리하네요.
mySql DB자체의 트리거가 아니라 XE 자체에서 트리거를 생성하고 실행하도록하고 있구요.
위의 코드는 그 XE자체의 트리거를 실행하는 코드입니다.
제가 말한 것은 mySql의 트리거이구요.
그런데 가입날짜라면 어차피 member테이블에도 입력이 되는데 굳이 쿠키에서 가져올 필요가 있나요?그냥 member테이블에서 id랑 regdate랑 가져오면 되지 않나요?
트리거 설정하는 mySql 쿼리하나만 입력하시면 될것같은데요..
-
바이블인사이드
2009.08.24 16:42
아.. regdate에서 가져오면 되겠군요
근데..
위에서 말씀드린대로
"트리거 설정하는 mysql 쿼리하나만 입력"
이게 저에겐 굉장히 생소하고 어려운게 사실입니다..
뭘 어떻게 해야되는건지.. 전혀 감이 안오네요
공치님께서는 잘 아시니까 쉬워보이시겠지만요..^^
위 질문 2개에 대한 답변 다시한번 부탁드리겠습니다..
죄송합니다 자꾸 질문드려서..
-
khongchi
2009.08.24 16:54
(공치가 아니라 콩치입니다 ㅋㅋ)
암튼 제가 직접 다 알려드리지 않는 것은 저도 직접 해본적이 없구..
트리거를 쓰려면 트리거에 대해 공부를 해야하는 것이 당연하구요..
또 웹에 검색하면 충분히 많은 검색글들이 있구요^^
트리거는 DB에서 어떤 테이블에 어떤 쿼리가 실행되면 그 쿼리가 실행되기 전이나 실행된 후에 그에 따라 연쇄적으로 이루어져야할 일들을 지정하는 쿼리입니다.
예를 들면 만약 한 회원이 탈퇴를 한다면 member테이블에서 그 회원의 정보만 지운다고 되는게 아니라 그 회원을 친구로 등록한 사람들의 친구목록에서 그 탈퇴한 사람을 지워야하며.. 암튼 다른 작업이 동시에 이루어져야하지요..
이런 작업들을 자동으로 하도록 트리거를 등록해 놓는 것이지요.
트리거 문법은 금방 찾아보실수 있을 것이구요.
등록하는 방법은 간단합니다. 그냥 sql쿼리랑 똑같습니다. create table, insert와 같은 쿼리처럼 트리거를 등록하는 sql쿼리를 실행하면 됩니다.
-
바이블인사이드
2009.08.24 17:34
네 콩치님 감사드립니다.. 내용 참조하여 한번 연구해보겠습니다~~
수고요~~^^^
-
khongchi
2009.08.24 16:56
그런데 member에 다 포함되어 있는 내용인데요.. 따로 테이블을 만들 필요가 있을까요??
자세한 내용은 잘 모르니.. ㅎㅎ
-
바이블인사이드
2009.08.24 17:15
네.. 근데 다는 아니고 문제는 쿠키값인데요
이 쿠키값은 포함된게 아니라요.. 꼭 따로 만들어야 된답니다^^
자세한 내용은 잘 모르시면.. ^^;
암튼 감사드립니다
한번의 쿼리로 두개의 테이블에 insert를 할 수는 없죠 ^^
"xe_text" 테이블에 insert 하는 XMLQuery를 만드시면 됩니다.