열라 바쁜 가끔 빈곤 곰돌이

XE에서 개발하다가 mysql의 프로시저를 호출해야 할 일이 생겼습니다. 

DB에서 약 3천건의 데이터를 단순히 불러다가 다시 저장하는 insert select 작업입니다.

프로시저는 이미 만들어져 있어서 어찌 하나 보니 예전 방식으로 mysql_connect등을 하는 문서들을 보았는데, 

일단 그러면 안됩니다. (PHP7에서 다 없어집니다.)


http://www.slideshare.net/sejin7940/xe-hack

상기 링크의 32번 슬라이드를 참고하여 작업했습니다.

슬라이드에는 결과값을 받아오는 부분이 있어서 길지만,

저는 프로시져를 실행하고 그 결과에 대해서 받아올 생각이 없었으므로, 

간단하게 아래 쿼리로 작업이 가능했습니다.



/* 쿼리 직접 날리기 */

//DB의 인스턴스를 생성합니다.
$oDB = &DB::getInstance();
//쿼리에 해당 인자를 넣습니다.
$query = "call CopyList('".$in_a."', '".$in_b."', '".$src_a."', '".$src_b."')";
//쿼리를 실행합니다.
$exec_query = $oDB->_query($query);


위의 프로시저를 대충 설명하자면, src_a, src_b 를 받아 데이터를 입력할때 in_a, in_b로 값을 치환하여 저장하는 프로시져입니다.


여기서 주의할점은 $in_a 같이 각 변수 앞뒤에 '(홑따옴표) 를 넣어주어야 한다는 겁니다.

그러니까 xml query와 같이 XE는 쿼리에 대해서 변환을 안하고 그대로 DB에다가 쿼리를 넣습니다.

곧 코딩할때 sql 쿼리문을 다 작성해야 한다는 겁니다.


예전처럼 어렵지 않습니다.

사실상 executeQuery 함수전에 쿼리를 변수에 넣어주는 작업이 추가 되었을 뿐입니다.

Comment +0