PDO-Anweisungseinfügungsanomalie mit Bit(1)-Feld
Beim Einfügen von Werten in ein Bit(1)-Feld mithilfe von PDO-vorbereiteten Anweisungen wird ein unerwartetes Ergebnis auftritt. Anstelle des beabsichtigten Werts 0 speichert die Datenbank 1 in der Tabelle.
Diese Anomalie entsteht aufgrund der binären Natur der BIT-Spalten in MySQL. Obwohl sie als numerisch kategorisiert sind, werden sie als binäre Typen behandelt, was zu Kompatibilitätsproblemen mit bestimmten Client-Bibliotheken führt.
Lösung mit TINYINT(1)
Um dieses Problem zu vermeiden Erwägen Sie stattdessen den Wechsel zu einer TINYINT(1)-Spalte. Dieser alternative Datentyp bietet ähnliche Speicheranforderungen wie BIT(1) und beseitigt gleichzeitig Kompatibilitätsprobleme mit PDO und anderen Client-Bibliotheken.
Verwenden von bindValue mit PDO::PARAM_INT
If Eine Änderung des Spaltentyps ist nicht möglich. Eine alternative Lösung besteht darin, bindValue mit dem Typhinweis PDO::PARAM_INT zu verwenden. Dieser Ansatz zwingt PDO dazu, den Wert als Ganzzahl zu behandeln, wodurch die Einfügungsanomalie behoben wird.
Beispielcode
<code class="php">$pdo = new PDO("connection string etc"); $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)'); $statement->bindValue(':someText', "TEST"); $statement->bindValue(':testBool', 0, PDO::PARAM_INT); $statement->execute();</code>
Beachten Sie, dass diese Problemumgehung zwar das Einfügungsproblem beheben kann , ist es dennoch ratsam, auf TINYINT(1) umzusteigen, um die Kompatibilität zu verbessern und potenzielle Leistungsvorteile zu erzielen.
Das obige ist der detaillierte Inhalt vonWarum fügt PDO in MySQL eine 1 statt einer 0 in eine BIT(1)-Spalte ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!