현재 위치: > 최신 기사 목록> MySQL 바이너리 필드에서 데이터를 가져온 후 Bindec ()을 사용하여 데이터를 처리하는 방법

MySQL 바이너리 필드에서 데이터를 가져온 후 Bindec ()을 사용하여 데이터를 처리하는 방법

M66 2025-06-06

PHP 개발에서 우리는 종종 MySQL 데이터베이스에서 이진 데이터를 읽어야하는 상황에 종종 발생합니다. 특히 바이너리 필드 (예 : 이진 , Varbinary 또는 비트 유형)가 데이터베이스에 저장되는 경우 이러한 데이터를 10 진수 값으로 올바르게 변환하는 방법은 비교적 일반적인 문제가되었습니다. PHP는 이진 문자열을 10 진수 정수로 변환하기위한 Bindec 함수를 제공하지만 직접 사용할 때는 약간의 함정이 발생합니다.

이 기사는 Bindec 함수를 올바르게 사용하여 MySQL에서 가져온 이진 필드 데이터를 정확하게 사용하는 방법을 자세히 설명합니다.

1. MySQL의 이진 필드는 꺼낸 후 어떻게 보입니까?

데이터베이스에 그러한 필드 정의가 있다고 가정합니다.

 CREATE TABLE example (
    id INT PRIMARY KEY,
    bin_data BINARY(4)
);

이진 데이터 저장 :

 INSERT INTO example (id, bin_data) VALUES (1, 0b1011);

PHP에서 PDO 또는 MySQLI를 통해 쿼리 할 때 BIN_DATA 필드는 문자열로 반환되지만 현재 문자열은 텍스트 "1011"또는 "11"이 아니라 해당 바이트 스트림이 아닙니다.

예를 들어, 꺼내면 "\ x0b \ x00 \ x00 \ x00" 과 같은 원시 바이트 일 수 있으며 Bindec을 직접 호출 한 결과가 잘못되었습니다.

2. Bindec가 필요로하는 것은 "0"및 "1"으로 구성된 이진 문자열입니다.

Bindec 함수의 인수는 "1011" 과 같은 문자열이어야합니다. 이진 바이트 스트림을 직접 제공하면 바이트 값을 구문 분석하지 않고 문자별로 해석하여 오류 결과를 초래합니다.

3. 올바르게 다루는 방법은 무엇입니까?

솔루션 1 : 바이트 스트림을 이진 문자열로 변환합니다.

PHP의 내장 기능을 사용하여 바이트 별 "0"및 "1"문자열로 변환 한 다음 Bindec 으로 구문 분석하십시오.

샘플 코드 :

 <?php
// 가정합니다 MySQL 이진 필드가 제거되었습니다
$binaryData = "\x0B";  // 소수11,해당 바이너리1011

// 바이트 스트림을 이진 스트림으로 변환하십시오
function binaryToBitString(string $binary): string {
    $bitString = '';
    for ($i = 0; $i < strlen($binary); $i++) {
        // ord() 캐릭터를 얻으십시오 ASCII 암호,변환8비트 바이너리 스트링
        $bitString .= str_pad(decbin(ord($binary[$i])), 8, '0', STR_PAD_LEFT);
    }
    return $bitString;
}

$bitString = binaryToBitString($binaryData);
echo "Bit string: " . $bitString . "\n";

// 사용 bindec 转换为소수数
$decimalValue = bindec($bitString);
echo "Decimal value: " . $decimalValue . "\n";
?>

출력 결과 :

 Bit string: 00001011
Decimal value: 11

MySQL에서 가져온 이진 데이터를 MySQL에서 올바르게 변환합니다.

솔루션 2 : 비트 유형에 직접 MySQL 기능을 사용하십시오

필드가 비트 유형 인 경우 쿼리 할 때 MySQL 기능을 사용하여 소수점 번호로 변환 할 수 있습니다.

 SELECT id, BIN(bin_data) AS bin_str FROM example;

또는 정수로 직접 변환하십시오.

 SELECT id, CONV(HEX(bin_data), 16, 10) AS decimal_value FROM example;

이런 식으로 PHP쪽에 직접 얻는 것은 이진 바이트 스트림의 복잡한 처리를 피하기 위해 문자열 형태의 이진 또는 소수점입니다.

4. 요약

  • Bindec 함수는 "0"및 "1"으로 구성된 이진 문자열 만 처리 할 수 ​​있으며 이진 바이트 스트림을 지원하지 않습니다.

  • MySQL에서 가져온 이진 필드는 일반적으로 바이트 스트림이며 Bindec을 사용하기 전에 이진 문자열로 변환해야합니다.

  • 직접 함수 바이트 바이트 변환을 작성하거나 SQL 쿼리 중에 기능 전처리를 사용할 수 있습니다.

  • 이진 데이터의 오해를 피하기 위해 실제 상황에 따라 적절한 처리 계획을 선택하십시오.