Background Image
조회 수 24446 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

MySQL + PHP 기반에서 CUBRID R3.1 + PHP기반으로 포팅하기

소개: MySQL을 CUBRID로 포팅하는 작업은 기존에 서비스 되고 있는 경우 고칠 부분의 양에 따라 어려움을 겪을 수 있으나 어렵진 않다. 또는 새롭게 개발할 경우 조금 다른 점은 있으나 금방 숙지하여 진행할 수 있다

기존에 작성된 문서(MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기 http://www.cubrid.com/zbxe/47285 ) CUBRID2008R3.1 버전에 맞추어 재 작성하였다. (BLOB을 제외한 나머지는 R3.0에도 적용된다.)

적용 대상: CUBRID2008R3.1

적용 환경

본 문서는 아래와 같은 환경에서 적용 되었다.

CUBIRD 2008R3.1이상

php API를 사용하기 위한 php extension 환경 구성

MySQL 데이터 타입 변경하기

데이터 타입 변경

MySQL 주요 데이터 타입의 변환 방법은 다음과 같다.

MySQL

CUBRID

비고

BOOLEAN

BIT

 

TINYBLOB(n) (n <= 256)

BIT VARYING(n) or

BLOB

1G 이하는 BIT VARYING(n) 대체 권장

1G 이상은 BLOB로 대체 권장

BLOB(n) (<= 65K)

MEDUIMBLOB (<= 16M)

LONGBLOB (<= 4G)

YEAR

-

VARCHAR(4)

TEXT(n)

STRING

 

SET(n)

SET

MySQL: n < = 64

CUBRID: 개수 및 데이터 타입 제한 없음

ENUM(..)

-

MySQL 고유타입

이블 생성 쿼리 변환 에졔

다양한 변환 예제를 보여주기 위해 가상의 테이블을 생성하였다.

MySQL 용 테이블 생성 쿼리

CREATE TABLE `ma_table` (

  `ma_id` int(11) NOT NULL auto_increment,

  `ma_subject` varchar(255) NOT NULL default '',

  `ma_content` mediumtext NOT NULL,

  `ma_time` datetime NOT NULL default '0000-00-00 00:00:00.000',

  `ma_ip` varchar(255) NOT NULL default '',

  `ma_last_option` text NOT NULL,

PRIMARY KEY  (`ma_id`),

UNIQUE KEY `fkey1` (`ma_subject`,` ma_content`)

);

CREATE INDEX ma_index ON ma_table (ma_ip);

 CUBRID로 변환한 테이블 생성 쿼리

CREATE TABLE ma_table (

               ma_id INTEGER NOT NULL auto_increment,

               ma_subject VARCHAR(255) NOT NULL DEFAULT '',

               ma_content STRING NOT NULL,

               ma_time DATETIME NOT NULL DEFAULT datetime'00:00:00.000 AM 01/01/0001'  ,

               ma_ip VARCHAR(255) NOT NULL DEFAULT '',

               ma_last_option STRING NOT NULL,

PRIMARY KEY (ma_id),

UNIQUE (ma_subject, ma_content)

);

CREATE INDEX ma_index ON ma_table (ma_ip);

1.      테이블 명을 감싸고 있는 홀따옴표() 기호를 큰따옴표()로 변경하거나 제거한다.

2.      컬럼 명을 감싸고 있는 홀따옴표() 기호를 큰따옴표()로 변경하거나 제거한다.

3.      int(11) integer로 변경한다.

4.      mediumtext text string으로 변경한다.

5.      datetime default를 다음의 형식으로 변경한다. datetime'00:00:00 AM 01/01/0001'

6.      unique key에서 key를 제거한다.

 MySQL 함수 및 연산자 변경하기

CUBRID2008R3.0 이전 버전에서 지원하지 않던 NOW, IFNULL, LIMIT 등 많은 함수가 추가 되어 기존 MySQL용 주요 함수를 변경하지 않고 사용 가능하게 되었다.

MySQL 주요 함수의 변환 방법

MySQL

CUBRID

NOW

CUBRID2008R3.0 부터 지원

IFNULL()
SELECT IFNULL(NULL, 10);

CUBRID2008R3.0 부터 지원

LEFT()
SELECT LEFT(
CUBRID, 5);

CUBRID2008R3.0 부터 지원

CONCAT

SELECT CONCAT(CU, B, RID);

CUBRID2008R3.0 부터 지원

LIMIT

order by limit 1

CUBRID2008R3.0 부터 지원

MySQL 용 쿼리 변경하기

CUBRID2008R3.0 이전 버전에서 지원하지 않던 INSERT INTO SET, WHERE 1 !=1 등 이 지원되면서 MySQL용 주요 쿼리의 변경 작업이 줄어 들었다.

MySQL 주요 쿼리의 변환 방법

MySQL

CUBRID

INSERT INTO SET

CUBRID2008R3.0 부터 지원

WHERE 1

WHERE 1=1

WHERE 1 != 2

CUBRID2008R3.0 부터 지원

WHERE num_col = 1

WHERE num_col = 1

SELECT 1 ;

CUBRID2008R3.0 부터 지원

SELECT col_1 FROM tb1

LIMIT 1, 10;

CUBRID2008R3.0 부터 지원

 MySQL 주요 쿼리의 변환 예제

쿼리 변환 예제

 … where po_id = ‘5’”; // po_id 속성이 숫자형일 때
-> …where po_id = 5”; // 홀 따옴표 제거

" … where 1 ";

-> " … where 1=1 ";

MySQL 용 php API 변경하기

MySQL 주요 php API의 변환 방법은 다음과 같다. 주요 API 대부분이 mysql_ 대신 cubrid_를 사용하므로 대체가 가능하다.

MySQL 주요 php API의 변환 방법

MySQL

CUBRID

mysql_affected_rows()

cubrid_affected_rows()

mysql_close()

cubrid_disconnect()

mysql_connect()

cubrid_connect()

mysql_error_num()

cubrid_error_code()

mysql_error()

cubrid_error_msg()

mysql_query()

cubrid_execute()

mysql_fetch_array

cubrid_fetch()

 php API 변환 예제

mysql+php  e cubrid+php API 변환 예제

1. mysql_connect()

mysql_connect($host, $user, $pass);

->

cubrid_connect($host, $port, $db, $user, $pass);

2. my_insert_id()

$po_id = mysql_insert_id(); // tbl1 insert 후 호출
->

select current_val from db_serial where class_name = 'tbl1' 쿼리를 실행하여 가져온 값이 $r일 때

$po_id = $r["current_val"];

3. mysql_commit()

mysql_commit($conn_handle);
->

cubrid_commit($conn_handle);        // 주의! 연결 핸들이 끊김

PHP API 변환 시 주의 사항

·      Select 절이라도 꼭 트랜잭션 처리(cubrid_commit/cubrid_rollback)를 해야 한다. CUBRID 3-tier 구조로 동작이 되며, 원활한 자원해제를 위해 select 처리를 하였더라도 commit(또는 rollback) 처리를 하여 트랜잭션을 정리해야 한다.

·      Select 질의 수행하고 request handle를 꼭 닫아야 한다. select 질의를 cubrid_execute 를 실행한 후 해당 request handle close 를 해주지 않으면 cub_cas 의 메모리가 급격히 증가하게 되고, 해당 connection 이 여러 개의 cub_cas 에 연결되어있을 경우 서버의 리소스를 점유하여 성능 저하 현상이 발생한다

$con = cubrid_connect ("dbsvr.cubrid.com", 12345, "demodb");

if ($con) {

   echo "connected successfully";

   $req = cubrid_execute ( $con, "select * from members", CUBRID_INCLUDE_OID | CUBRID_ASYNC);

   if ($req) {

      while ( list ($id, $name) = cubrid_fetch ($req) ){

         echo $id;

         echo $name;

      }

      cubrid_close_request($req);

    }

    cubrid_commit($con);

   cubrid_disconnect($con);

}

참고문서

1.      CUBRID MySQL 비교:

http://www.cubrid.com/zbxe/bbs_developer_material/42215

2.      CUBRID MySQL PHP 함수 비교 :

http://www.cubrid.com/zbxe/24680

3.      CUBRID 2008 R3.0 릴리스 노트

http://www.cubrid.com/zbxe/83324

4.      PHP를 이용하여 CUBRID 사용할 때의 주의점

http://blog.naver.com/windyhan/110075051208


List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
86 기타 Oracle의 SYS_CONNECT_BY_PATH 함수 흉내내기 CUBRID_DEV 2009.06.15 26530
85 Install CUBRID6.6 이상에서 CUBRID2008 로 데이터베이스 이전 하기 3 남재우 2008.11.21 26445
84 기타 HA 환경 구성 시 데이터 복제 지연이 발생하는 경우 ECHO(7) port를 확인하자. 손승일 2012.11.29 26445
83 Windows windows 환경에서 여러버젼의 CUBRID 설치하여 사용하기 4 남재우 2009.09.16 26193
82 기타 동시 접속자에 따른 파라미터 설정 admin 2011.07.14 25686
81 Linux CUBRID Linux 부팅시 자동시작 서비스 설정 방법 정만영 2013.09.16 25479
80 PHP apache, php rpm package 생성 시 필요한 rpm 스펙 file admin 2011.07.14 25236
79 Linux CUBRID 복제 설계 가이드 file 정만영 2010.03.03 25139
78 CCI/DB API CCI-API 사용 예제 file 남재우 2009.07.01 25103
77 Java CUBRID Collection Data Type 사용하기 - JDBC 손승일 2009.08.15 24915
76 기타 CUBRID2008 쿼리 작성예제 cubebridge 2009.07.28 24905
75 기타 select .. for update 처리를 위한 Stored Procudure 등록 및 사용법 남재우 2011.12.10 24872
74 CCI/DB API CCI-API 에서 OID 사용 예제 file 남재우 2009.07.01 24861
73 ODBC/OLEDB Vista_IIS_CUBRID_ASP연동 janus 2010.01.31 24553
72 기타 CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2 3 김대진 2010.01.27 24541
71 기타 에러 메시지(error) 설명 및 조치 가이드 file CUBRID_DEV 2009.07.11 24456
» PHP MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1) 손승일 2011.03.30 24446
69 기타 독자적 테이블 사용되는 복제 재구성 file 손승일 2009.12.30 24173
68 Java Power*Architect 에서 CUBRID 사용하기 Prototype 2009.04.18 23879
67 Java AquaDataStudio 에서 CUBRID 사용하기 Prototype 2009.04.18 23667
Board Pagination Prev 1 2 3 4 5 6 7 8 9 Next
/ 9

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales