2014-02-27 5 views
0

리눅스, PHP 및 MSSQL을 함께 사용하려고합니다.Linux, FreeTDS 및 PHP에서 이진 OID가 잘못 가져옵니다.

모든 OID (바이너리) 데이터 유형이 횡설수설 UTF-8로 반환된다는 점을 제외하고는 대부분 작동 할 수있었습니다. 예를 들면 :

문자열 ' "Ή의 %'(길이 = 8)

내가 반환하려는 것은 SQL 서버 관리 도구에서 선택하는 경우와 같이 16 진수 값이 예를 들면 다음과 같습니다. 0x15C122CE89002595

세부 사항 :

서버 : CentOS는 6.4

PHP 버전 : 5.5.9

FreeTDS를 버전 : 0.91RC2 (5 월 (14), 2011)

나는 PHP 함수 mssql_connect와의 연결을 초기화 중입니다. 그런 다음 mssql_query를 사용하여 쿼리를 실행 한 다음 mssql_fetch_assoc을 사용하여 결과를 가져옵니다. 필자는 PDO와 함께 성공을 거듭 시도했습니다. 이것은 내가 FreeTDS 설치 문제를 생각하게합니까? 또한, 그의 동료가 Windows 시스템에 SqlSrv를 설치하면 예상대로 바이너리 OID를 반환합니다.

OID가 예상대로 반환되지 않는 경우이 문제가 발생합니까?

미리 감사드립니다.

+0

"횡설수설 UTF-8로 반환됩니다."--- 그렇지 않습니다. 그것들은 바이트로 반환되지만, 어떤 이유로 ** 당신이 읽을 수 있다고 가정하면'var_dump()'됩니다. – zerkms

답변

0

당신은 unpack를 사용하여 읽을 수있는 16 진수 문자열로 바이너리를 변환 할 수 있습니다 : 아무 것도 var_dump 원하는 서식 데이터에 대한 아무 생각이 없다 (그리고 그것은 단지 형식에 대해 때문에

$bin = "\x15\xC1\x22\xCE\x89\x00\x25\x95"; 
$str = unpack('H*', $bin); 
var_dump($str[1]); // string(16) "15c122ce89002595" 

현재 코드가 "작동하지 않습니다") 그리고 출력 바이트를 그대로 출력합니다.

+0

답장을 보내 주셔서 감사합니다. 나는 이것을 내일 시도 할 것이다. 내가 작성한 짧은 예제를 실행했는데 제대로 작동하는 것 같습니다. SQL 쿼리 또는 freetds 구성을 변경하여 예상 한 문자열을 반환하는 방법을 알고 있습니까? 가장 혼란스러워하는 점은 WAMP/SqlSrv 스택에서 검색 한 결과가 바이너리가 읽을 수있는 16 진수 문자열로 출력된다는 것입니다. 나는 그것의 다른 플랫폼/드라이버의 결과를 가정합니다. – hank12323

+0

@ user1494399 : "이진수는 읽을 수있는 16 진수 문자열로 출력됩니다."--- 문자열로 출력하기 때문입니다. PHP는 무엇을 출력하는지 신경 쓰지 않고 여러분이 묻는 것을 출력합니다. – zerkms