코드이그나이터 기반 PHP 오픈소스 게시판 : 씨아이보드

mssql 에서의 사용이 쉽지는 않아보이네요~

  • 동화아빠
  • 1
  • 4,048
  • 글주소
  • 09-04

오늘새벽 설치에 이어서 사용에 대해서도 문의겸 리포팅을 남깁니다.

저희가 기존mssql 로 만들어진 stand alone 어플리케이션에 웹연동용으로 ci board를 검토중인지라 

물론 mysql로 사용하고 mssql linked server로 사용을 해도 되기는 하지만 이왕이면 한db로 사용해보려고 시도해 보는 과정입니다.

그리고 참고로 저는 코드이그나이터도 ci board 도 그 존재를 알게 된지 만24시간이 안되는 초보중의 왕초보입니다 ㅜㅜ


이전글에서 생각했던 것처럼  우선은 local mariadb를 하나 셋팅해서 database정보를 수정한 후 다시 install 하니

아무 문제 없이 설치가 완료되었습니다.


그리고 SQL Server Migration Assistant for MySql 툴을 이용해  mariadb에 생성된 테이블과 데이터를 모두 mssql로 마이그레이션 완료하였습니다.

여기까지는 큰 문제가 없었고요.. 다시 database정보를  새로 셋팅한 mssql로 변경 (dbdriver는 sqlsrv) 해보니 사이트가 열리다 말면서 정상작동을 하지 않았습니다.


로그를 보니 cb_currentvisitor 를 추가하는 과정에서의 쿼리가 

Query error: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]키워드 'INTO' 근처의 구문이 잘못되었습니다. - Invalid query: REPLACE INTO "cb_currentvisitor" ("cur_ip", "mem_id", "cur_mem_name", "cur_datetime", "cur_page", "cur_url", "cur_referer", "cur_useragent") VALUES ( .....


이렇게 찍혔는데요.

REPLACE INTO 구문은 mssql에서 사용할 수 있는 쿼리가 아니어서 오류가 난 것 같습니다.

mysql의 해당 명령어를 찾아보니  아마도 delete후 insert 역할을 한번에 해주는 것 같더군요.


아무튼 이 부분이 어떻게 구성되어 있길래 REPLACE INTO 로 쿼리가 나왔나 싶어 

models\currentvisitor_model.php를 살펴보니   add_visitor 함수에 $result = $this->db->replace($this->_table, $updatedata); 구문,

그래서 _system\database\DB_query_builder.php를 봤더니 역시 _replace함수에서 REPLACE INTO ~~ 구문을 사용하는걸 확인하였습니다.


사실 이부분은 코드이그나이터에서 db->replace 에 대해서  지원하는 모든 DB의 쿼리호환을 확인하지 않아서 발생한 문제가 아닐까 추측되는데

지금 _system\database 안의 파일을 보면 드라이버나 유틸리티는 각 dbdriver별로 나뉘어 있는 반면 쿼리빌더는 한개의 파일만 있는거보니 전db 공통으로 쓰는 모양입니다.

이래서는 각 db별로 조금씩 틀린  쿼리나 문법, 함수등에서 계속 오류가 발생할 것 같은데요

두터운 사용자층을 가진 코드이그나이터가 이런정도의 호환성을 가지고 있지는 않을것 같고,,이 쿼리 빌더를 각 db별로 따로 사용할 방법이 있나요?


그리고 그게 안되면 ci board에서 사용한 db function중 mssql에서 호환되지 않는 쿼리를 만들어내는 함수 (replace 같은)를 다 찾아서 다른 대체 함수로 바꿔줘야 할수도 있다는건데 그 분량이 상당할듯 하고,, 다 작업을 한다고 해도  향후 ci board의 업데이트 패치를 적용할 수 없게된다는 단점이 생길 것 같습니다. 


웹 보드 솔루션중 mssql을 사용하는건 주로 asp로 만들어져서 pass,,  xe는 쓰고싶지 않고, 그누보드도 only mysql 이나 다름이 없어서

ci 기반으로 만들어진 ci board에 기대를 했는데  갈길이 머네요 ㅜㅜ


기 개발된 어플리케이션을 전부 mysql로 마이그레이션 개발 하는게 차라리 나을까 싶기도 합니다.


ci board 기  사용자중에 mssql 사용자는 한분도 안계셨던건지...;;


여튼 쿼리빌더 부분과  mssql 비호환 함수의  사용빈도 관련해 의견좀 부탁드립니다.. mssql 버전으로의 전환이 어느정도 가능하다면 그부분은 제가 기여할 수도 있을 것 같습니다