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


  1. Oracle의 SYS_CONNECT_BY_PATH 함수 흉내내기

    Date2009.06.15 Category기타 ByCUBRID_DEV Views26530
    Read More
  2. HA 환경 구성 시 데이터 복제 지연이 발생하는 경우 ECHO(7) port를 확인하자.

    Date2012.11.29 Category기타 By손승일 Views26448
    Read More
  3. CUBRID6.6 이상에서 CUBRID2008 로 데이터베이스 이전 하기

    Date2008.11.21 CategoryInstall By남재우 Views26445
    Read More
  4. windows 환경에서 여러버젼의 CUBRID 설치하여 사용하기

    Date2009.09.16 CategoryWindows By남재우 Views26193
    Read More
  5. 동시 접속자에 따른 파라미터 설정

    Date2011.07.14 Category기타 Byadmin Views25688
    Read More
  6. CUBRID Linux 부팅시 자동시작 서비스 설정 방법

    Date2013.09.16 CategoryLinux By정만영 Views25480
    Read More
  7. apache, php rpm package 생성 시 필요한 rpm 스펙

    Date2011.07.14 CategoryPHP Byadmin Views25240
    Read More
  8. CUBRID 복제 설계 가이드

    Date2010.03.03 CategoryLinux By정만영 Views25139
    Read More
  9. CCI-API 사용 예제

    Date2009.07.01 CategoryCCI/DB API By남재우 Views25103
    Read More
  10. CUBRID Collection Data Type 사용하기 - JDBC

    Date2009.08.15 CategoryJava By손승일 Views24915
    Read More
  11. CUBRID2008 쿼리 작성예제

    Date2009.07.28 Category기타 Bycubebridge Views24906
    Read More
  12. select .. for update 처리를 위한 Stored Procudure 등록 및 사용법

    Date2011.12.10 Category기타 By남재우 Views24873
    Read More
  13. CCI-API 에서 OID 사용 예제

    Date2009.07.01 CategoryCCI/DB API By남재우 Views24861
    Read More
  14. Vista_IIS_CUBRID_ASP연동

    Date2010.01.31 CategoryODBC/OLEDB Byjanus Views24553
    Read More
  15. CUBRID 데이터베이스와 연동하여 Qt어플리케이션 개발하기 - 2

    Date2010.01.27 Category기타 By김대진 Views24541
    Read More
  16. 에러 메시지(error) 설명 및 조치 가이드

    Date2009.07.11 Category기타 ByCUBRID_DEV Views24462
    Read More
  17. MySQL,PHP 기반에서 CUBRID,PHP 기반으로 포팅하기(CUBRID 2008 R3.1)

    Date2011.03.30 CategoryPHP By손승일 Views24446
    Read More
  18. 독자적 테이블 사용되는 복제 재구성

    Date2009.12.30 Category기타 By손승일 Views24174
    Read More
  19. Power*Architect 에서 CUBRID 사용하기

    Date2009.04.18 CategoryJava ByPrototype Views23879
    Read More
  20. AquaDataStudio 에서 CUBRID 사용하기

    Date2009.04.18 CategoryJava ByPrototype Views23667
    Read More
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