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
번호 분류 제목 글쓴이 날짜 조회 수
126 기타 CUBRID 2008 R4.0 GA 버전의 주요 기능만 요약한 PPT 문서 file admin 2011.07.14 15460
125 기타 CUBRID 2008 R4.0 파라미터 변경 사항 (일부) file admin 2011.07.14 13154
124 기타 CUBRID 볼륨 공간 재사용률 비교 - 2008 R3.1 vs. 2008 R4.0 file admin 2011.07.14 16555
123 튜닝 SNS 유형 서비스에서 CUBRID와 MySQL 조회 성능 비교 file admin 2011.07.14 21188
122 튜닝 CUBRID 2008 R4.0의 커버링 인덱스(covering index)는 무엇인가? file admin 2011.07.14 29882
121 튜닝 [질의튜닝]order by desc가 인덱스 타게 하려면 admin 2011.07.14 28468
120 튜닝 CUBRID 세미나 자료(개요 및 SQL 활용) file admin 2011.07.14 22769
119 PHP apache, php rpm package 생성 시 필요한 rpm 스펙 file admin 2011.07.14 25234
118 Install CUBRID Windows버전 삭제 및 재설치 실패시 강제 삭제하는 방법입니다. admin 2011.07.14 29548
» PHP MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1) 손승일 2011.03.30 24446
116 PHP phpize 를 이용한 PHP 모듈 설치 - LINUX file 남재우 2011.03.08 23085
115 PHP apache, PHP 설치하기 - LINUX file 남재우 2011.03.08 31304
114 기타 CUBRID에서의 BLOB/CLOB 타입 사용법 cubebridge 2011.03.08 30446
113 Install CUBRID 설치 안내 - LINUX 남재우 2011.03.08 30413
112 기타 데이터베이스 생성하기 file 남재우 2011.03.07 29091
111 기타 CUBRID 활용 - 질의 튜닝 사례 중심 file cubrid 2010.12.02 45961
110 기타 CUBRID Migration Toolkit 튜토리얼 file cubrid 2010.10.22 30475
109 기타 CUBRID 2008 R3.0 추가기능 file janus 2010.09.03 15455
108 기타 트랜잭션과 LOCK 초급과정 정만영 2010.07.01 20760
107 PHP IIS에서 PHP, CUBRID 사용하기 file 남재우 2010.04.19 30311
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