상위로 이동
로그인
오마이사이트

지식나눔

PHP 에서 원격지 mssql(sql2000) 서버 접속+자료 받기 (한글깨짐 문제)

해결과제

PHP로 개발할 홈페이지에서 원격지 mssql(SQL2000) 서버에 접속해 DATA 를 얻어와야 함.
 

중요이슈

  1. 웹 호스팅 서버에서 가능한지 여부
  2. 접속 된 후 가져온 데이터가 한글이 깨지는 문제 해결

진행순서

  1. PHP, MYSQL 환경의 웹호스팅 신청
  2. mssql 사용할 수 있는 환경 추가 신청
  3. adodb 모듈 다운받아 업로드
  4. 접속 (접속 테스트 중 아래와 같은 오류로 인해 혼란을 겪음)
    1. WARNING! Some character(s) could not be converted into client's character set. Unconverted bytes were changed to question marks ('?'). (severity 16) ==> 접속은 정상!! 하지만, 클라이언트 캐릭터 셋이 맞지 않아 생긴 문제임을 몰라 접속 정보가지고 몇 시간을 씨름 하였음
    2. 특히, 테스트 삼아 작성한 쿼리의 데이터가 많아 기대한 내용이 출력되지 않아 위와 같은 혼란을 겪었으니 보다 명확한 쿼리로 테스트 해볼 것을 권함
  5. 데이터 가져옴
    1. 가져온 데이터중 한글이 깨지는 문제 발생
    2. 원인은 위 4-1 에서 발생한 warning 때문인데, 웹 문서들을 오랜시간 찾아 본 결과 FreeDTS 라는 모듈을 설치해서 해결할 수 있다는 내용이 많음
    3. 웹 호스팅이라는 종속적인 상황상 모듈설치를 하지 않고 해결할수 있는 방법 모색하던중
    4. 각 필드의 데이터를 binary 로 변환해서 받고 iconv 를 이용해 인코딩 방식을 변경하는 방법으로 해결함
      "SELECT convert(varbinary(20), ENGINEER), convert(varbinary(200), CUSTNM), PHONENO, MOBILENO, SEQ FROM VIEW_GMR_RECOVERTY_STATUS_RETRIEVE where SEQ like '%1121%'";
      mb_convert_encoding($field_value,"UTF-8", "CP949");
    5. 다양한 캐릭터 셋을 테스트 해야 할 경우가 많으므로 루프를 돌려 테스트해 볼 것을 권함 ==> 한 개씩 테스트 할 때 해결하지 못하다가 여러 캐릭터 셋을 배열에 넣고 mb_convert_encoding 호출되는 for 루프를 돌려 바로 해결 하였음
 
<?php 
echo("
<html>
<head>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>
<title>:: 원격지 MS-SQL DATA 얻기</title>
</head>
<body>
");
$db_host = "원격지호스트IP또는URL:포트번호";  // 포트번호는 기본이면 : 과 함께 생략
$db_name = "DB이름";
$db_user = "사용자ID";
$db_passwd = "패스워드";
include "./adodb/adodb.inc.php";
$db = @ADONewConnection("mssql"); # 예 'mysql' 또는 'postgres'
$db->debug = true;                            // 디버깅용
@$db->Connect($db_host, $db_user, $db_passwd, $db_name);    // 접속 ( @ 를 제거하면 캐릭터 셋이 맞지 않는다는 오류가 나올 수 있음, 접속은 정상 )
@$rs = $db->Execute("SELECT convert(varbinary(20), 한글값필드명1), convert(varbinary(200), 한글값필드명2), 기타필드명들... FROM 테이블이름 where SEQ like '%1121%'");
$TTT = $rs->GetRows();
// 변경해 볼 캐릭터 셋 배열로 추가
$chars_array = array("UTF-16BE", "UTF-16LE", "ISO-10646-UCS-2", "CP949", "EUC-KR", "ASCII", "iso-8859-1", "UCS-2", "UCS-2LE", "UCS-4LE", "UCS-2BE");
for ($i=0,$cnt=sizeof($chars_array); $i<$cnt; $i++) {
 // 정상적으로 변환되는 캐릭터 셋이 무엇인지 출력 해 봄
 echo("{$chars_array[$i]} : ") . mb_convert_encoding($TTT[0][0],"UTF-8", $chars_array[$i]) . " / ";
 echo("{$chars_array[$i]} : ") . mb_convert_encoding($TTT[0][1],"UTF-8", $chars_array[$i]) . " / {$TTT[0][2]} / {$TTT[0][3]} / {$TTT[0][4]}<br>";
}
echo("
</body>
</html>
");
?>

Character Sets
charset=

Some Basic Ones

charset=big5
Chinese Traditional (Big5)
charset=euc-kr
Korean (EUC)
charset=iso-8859-1
Western Alphabet
charset=iso-8859-2
Central European Alphabet (ISO)
charset=iso-8859-3
Latin 3 Alphabet (ISO)
charset=iso-8859-4
Baltic Alphabet (ISO)
charset=iso-8859-5
Cyrillic Alphabet (ISO)
charset=iso-8859-6
Arabic Alphabet (ISO)
charset=iso-8859-7
Greek Alphabet (ISO)
charset=iso-8859-8
Hebrew Alphabet (ISO)
charset=koi8-r
Cyrillic Alphabet (KOI8-R)
charset=shift-jis
Japanese (Shift-JIS)
charset=x-euc
Japanese (EUC)
charset=utf-8
Universal Alphabet (UTF-8)
charset=windows-1250
Central European Alphabet (Windows)
charset=windows-1251
Cyrillic Alphabet (Windows)
charset=windows-1252
Western Alphabet (Windows)
charset=windows-1253
Greek Alphabet (Windows)
charset=windows-1254
Turkish Alphabet
charset=windows-1255
Hebrew Alphabet (Windows)
charset=windows-1256
Arabic Alphabet (Windows)
charset=windows-1257
Baltic Alphabet (Windows)
charset=windows-1258
Vietnamese Alphabet (Windows)
charset=windows-874
Thai (Windows)

A Longer List

Arabic (ASMO 708)
##charset=ASMO-708
Arabic (DOS)
##charset=DOS-720
Arabic (ISO)
##charset=iso-8859-6
Arabic (Mac)
##charset=x-mac-arabic
Arabic (Windows)
##charset=windows-1256
Baltic (DOS)
##charset=ibm775
Baltic (ISO)
##charset=iso-8859-4
Baltic (Windows)
##charset=windows-1257
Central European (DOS)
##charset=ibm852
Central European (ISO)
##charset=iso-8859-2
Central European (Mac)
##charset=x-mac-ce
Central European (Windows)
##charset=windows-1250
Chinese Simplified (EUC)
##charset=EUC-CN
Chinese Simplified (GB2312)
##charset=gb2312
Chinese Simplified (HZ)
##charset=hz-gb-2312
Chinese Simplified (Mac)
##charset=x-mac-chinesesimp
Chinese Traditional (Big5)
##charset=big5
Chinese Traditional (CNS)
##charset=x-Chinese-CNS
Chinese Traditional (Eten)
##charset=x-Chinese-Eten
Chinese Traditional (Mac)
##charset=x-mac-chinesetrad
##charset=950
Cyrillic (DOS)
##charset=cp866
Cyrillic (ISO)
##charset=iso-8859-5
Cyrillic (KOI8-R)
##charset=koi8-r
Cyrillic (KOI8-U)
##charset=koi8-u
Cyrillic (Mac)
##charset=x-mac-cyrillic
Cyrillic (Windows)
##charset=windows-1251
Europa
##charset=x-Europa
German (IA5)
##charset=x-IA5-German
Greek (DOS)
##charset=ibm737
Greek (ISO)
##charset=iso-8859-7
Greek (Mac)
##charset=x-mac-greek
Greek (Windows)
##charset=windows-1253
##charset= 
Greek, Modern (DOS)
##charset=ibm869
Hebrew (DOS)
##charset=DOS-862
Hebrew (ISO-Logical)
##charset=iso-8859-8-i
Hebrew (ISO-Visual)
##charset=iso-8859-8
Hebrew (Mac)
##charset=x-mac-hebrew
Hebrew (Windows)
##charset=windows-1255
IBM EBCDIC (Arabic)
##charset=x-EBCDIC-Arabic
IBM EBCDIC (Cyrillic Russian)
##charset=x-EBCDIC-CyrillicRussian
IBM EBCDIC (Cyrillic Serbian-Bulgarian)
##charset=x-EBCDIC-CyrillicSerbianBulgarian
IBM EBCDIC (Denmark-Norway)
##charset=x-EBCDIC-DenmarkNorway
IBM EBCDIC (Denmark-Norway-Euro)
##charset=x-ebcdic-denmarknorway-euro
IBM EBCDIC (Finland-Sweden)
##charset=x-EBCDIC-FinlandSweden
IBM EBCDIC (Finland-Sweden-Euro)
##charset=x-ebcdic-finlandsweden-euro
IBM EBCDIC (Finland-Sweden-Euro)
##charset=x-ebcdic-finlandsweden-euro
IBM EBCDIC (France-Euro)
##charset=x-ebcdic-france-euro
IBM EBCDIC (Germany)
##charset=x-EBCDIC-Germany
IBM EBCDIC (Germany-Euro)
##charset=x-ebcdic-germany-euro
IBM EBCDIC (Greek Modern)
##charset=x-EBCDIC-GreekModern
IBM EBCDIC (Greek)
##charset=x-EBCDIC-Greek
IBM EBCDIC (Hebrew)
##charset=x-EBCDIC-Hebrew
IBM EBCDIC (Icelandic)
##charset=x-EBCDIC-Icelandic
IBM EBCDIC (Icelandic-Euro)
##charset=x-ebcdic-icelandic-euro
IBM EBCDIC (International-Euro)
##charset=x-ebcdic-international-euro
IBM EBCDIC (Italy)
##charset=x-EBCDIC-Italy
IBM EBCDIC (Italy-Euro)
##charset=x-ebcdic-italy-euro
IBM EBCDIC (Japanese and Japanese Katakana)
##charset=x-EBCDIC-JapaneseAndKana
IBM EBCDIC (Japanese and Japanese-Latin)
##charset=x-EBCDIC-JapaneseAndJapaneseLatin
IBM EBCDIC (Japanese and US-Canada)
##charset=x-EBCDIC-JapaneseAndUSCanada
IBM EBCDIC (Japanese katakana)
##charset=x-EBCDIC-JapaneseKatakana
IBM EBCDIC (Korean and Korean Extended)
##charset=x-EBCDIC-KoreanAndKoreanExtended
IBM EBCDIC (Korean Extended)
##charset=x-EBCDIC-KoreanExtended
IBM EBCDIC (Multilingual Latin-2)
##charset=CP870
IBM EBCDIC (Simplified Chinese)
##charset=x-EBCDIC-SimplifiedChinese
IBM EBCDIC (Spain)
##charset=X-EBCDIC-Spain
IBM EBCDIC (Spain-Euro)
##charset=x-ebcdic-spain-euro
IBM EBCDIC (Thai)
##charset=x-EBCDIC-Thai
IBM EBCDIC (Traditional Chinese)
##charset=x-EBCDIC-TraditionalChinese
IBM EBCDIC (Turkish Latin-5)
##charset=CP1026
IBM EBCDIC (Turkish)
##charset=x-EBCDIC-Turkish
IBM EBCDIC (UK)
##charset=x-EBCDIC-UK
IBM EBCDIC (UK-Euro)
##charset=x-ebcdic-uk-euro
IBM EBCDIC (US-Canada)
##charset=ebcdic-cp-us
IBM EBCDIC (US-Canada-Euro)
##charset=x-ebcdic-cp-us-euro
Icelandic (DOS)
##charset=ibm861
Icelandic (Mac)
##charset=x-mac-icelandic
ISCII Assamese
##charset=x-iscii-as
ISCII Bengali
##charset=x-iscii-be
ISCII Devanagari
##charset=x-iscii-de
ISCII Gujarathi
##charset=x-iscii-gu
ISCII Kannada
##charset=x-iscii-ka
ISCII Malayalam
##charset=x-iscii-ma
ISCII Oriya
##charset=x-iscii-or
ISCII Panjabi
##charset=x-iscii-pa
ISCII Tamil
##charset=x-iscii-ta
ISCII Telugu
##charset=x-iscii-te
Japanese (EUC)
##charset=euc-jp
##charset=x-euc-jp
Japanese (JIS)
##charset=iso-2022-jp
Japanese (JIS-Allow 1 byte Kana - SO/SI)
##charset=iso-2022-jp
Japanese (JIS-Allow 1 byte Kana)
##charset=csISO2022JP
Japanese (Mac)
##charset=x-mac-japanese
Japanese (Shift-JIS)
##charset=shift_jis
Korean
##charset=ks_c_5601-1987
Korean (EUC)
##charset=euc-kr
Korean (ISO)
##charset=iso-2022-kr
Korean (Johab)
##charset=Johab
Korean (Mac)
##charset=x-mac-korean
Latin 3 (ISO)
##charset=iso-8859-3
Latin 9 (ISO)
##charset=iso-8859-15
Norwegian (IA5)
##charset=x-IA5-Norwegian
OEM United States
##charset=IBM437
Swedish (IA5)
##charset=x-IA5-Swedish
Thai (Windows)
##charset=windows-874
Turkish (DOS)
##charset=ibm857
Turkish (ISO)
##charset=iso-8859-9
Turkish (Mac)
##charset=x-mac-turkish
Turkish (Windows)
##charset=windows-1254
Unicode
##charset=unicode
Unicode (Big-Endian)
##charset=unicodeFFFE
Unicode (UTF-7)
##charset=utf-7
Unicode (UTF-8)
##charset=utf-8
US-ASCII
##charset=us-ascii
Vietnamese (Windows)
##charset=windows-1258
Western European (DOS)
##charset=ibm850
Western European (IA5)
##charset=x-IA5
Western European (ISO)
##charset=iso-8859-1
Western European (Mac)
##charset=macintosh
Western European (Windows)
##charset=Windows-1252
공유하기
등록자

이주한

등록일
2010-03-17 02:47
조회
24,784