Aktueller Standort: Startseite> Neueste Artikel> So verwenden Sie BindEc (), um Daten nach dem Abholen von Daten von MySQL -Binärfeldern zu verarbeiten

So verwenden Sie BindEc (), um Daten nach dem Abholen von Daten von MySQL -Binärfeldern zu verarbeiten

M66 2025-06-06

In der PHP -Entwicklung stoßen wir häufig auf Situationen, in denen binäre Daten aus MySQL -Datenbanken gelesen werden müssen. Insbesondere wenn binäre Felder (z. B. binäre , variäarische oder Bittypen ) in der Datenbank gespeichert werden, ist die korrekte Umwandlung dieser Daten in Dezimalwerte zu einem relativ häufigen Problem geworden. PHP liefert eine Bindec -Funktion zum Umwandeln von Binärzeichenfolgen in Dezimalzahlen, aber Sie stoßen häufig auf einige Fallstricke, wenn Sie sie direkt verwenden.

In diesem Artikel wird detailliert erläutert, wie die Funktion Binec , um binäre Felddaten aus MySQL korrekt zu verarbeiten.

1. Wie sieht das Binärfeld in MySQL aus, nachdem es herausgenommen wird?

Angenommen, die Datenbank hat eine solche Felddefinition:

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

Binärdaten speichern in:

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

Wenn Sie PDO oder MySQLI in PHP abfragen, wird das Feld Bin_data als Zeichenfolge zurückgegeben, aber die Zeichenfolge ist zu diesem Zeitpunkt binärer Inhalt, nicht der Text "1011" oder "11", sondern der entsprechende Byte -Stream.

Zum Beispiel kann es nach dem Ausführen ein roher Byte wie "\ x0b \ x00 \ x00 \ x00" sein und das Ergebnis des direkten Aufrufens von BindEc ist falsch.

2. Was Binec braucht eine binäre Zeichenfolge, die aus "0" und "1" besteht.

Die Argumente der Bindec -Funktion sollten Zeichenfolgen wie "1011" sein. Wenn Sie ihm einen Binär -Byte -Stream direkt angeben, wird der Bytewert nicht analysiert, sondern ihn durch Zeichen interpretiert, was zu einem Fehlerergebnis führt.

3. Wie kann man richtig damit umgehen?

Lösung 1: Konvertieren Sie einen Byte -Stream in eine binäre Zeichenfolge

Verwenden Sie die integrierten Funktionen von PHP, um sie in "0" und "1" -Saiten per Byte umzuwandeln, und analysieren Sie sie dann mit Binesec .

Beispielcode:

 <?php
// Annehmen von MySQL Das binäre Feld entfernt
$binaryData = "\x0B";  // Dezimal11,Entsprechend binär1011

// Konvertieren Sie einen Byte -Stream in eine binäre Zeichenfolge
function binaryToBitString(string $binary): string {
    $bitString = '';
    for ($i = 0; $i < strlen($binary); $i++) {
        // ord() Holen Sie sich Charaktere ASCII Code,Konvertieren zu8Bit Binärer String
        $bitString .= str_pad(decbin(ord($binary[$i])), 8, '0', STR_PAD_LEFT);
    }
    return $bitString;
}

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

// verwenden bindec 转换为Dezimal数
$decimalValue = bindec($bitString);
echo "Decimal value: " . $decimalValue . "\n";
?>

Ausgangsergebnis:

 Bit string: 00001011
Decimal value: 11

Dadurch werden Binärdaten, die von MySQL entnommen wurden, korrekt in Dezimalzahlen umwandelt.

Lösung 2: Verwenden Sie MySQL -Funktionen direkt für Bit -Typen

Wenn das Feld von Bittyp ist, können Sie es bei der Abfrage in eine Dezimalzahl unter Verwendung der MySQL -Funktion konvertieren, z. B. bei der Abfrage:

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

Oder konvertieren Sie es direkt in eine Ganzzahl:

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

Auf diese Weise ist das, was Sie direkt auf der PHP -Seite erhalten, binär oder dezimal in Form von Zeichenfolgen, wodurch die komplexe Verarbeitung von binären Byteströmen vermieden wird.

4. Zusammenfassung

  • Die Bindec -Funktion kann nur binäre Zeichenfolgen aus "0" und "1" verarbeiten und unterstützt binäre Byte -Streams nicht.

  • Die von MySQL entnommenen Binärfelder sind normalerweise Byte -Streams und müssen vor der Verwendung von Bindec in binäre Zeichenfolgen umgewandelt werden.

  • Sie können Funktionen Byte-byte-Konvertierung selbst schreiben oder die Funktionsvorverarbeitung bei SQL-Abfragen verwenden.

  • Wählen Sie den entsprechenden Verarbeitungsplan gemäß der tatsächlichen Situation, um eine Fehlinterpretation von Binärdaten zu vermeiden.