Das Einfügen von 0 in ein MySQL BIT(1)-Feld führt zu 1: Problem und Lösung
Ein Versuch, einen 0-Wert in ein einzufügen Das BIT(1)-Feld in MySQL, das PDO-vorbereitete Anweisungen verwendet, führt unerwartet dazu, dass ein Wert von 1 in die Tabelle geschrieben wird. Dieses Verhalten tritt trotz der Verwendung verschiedener Formen der Parameterbindung und sogar von Roh-SQL auf, jedoch nur beim Einfügen des Werts 0.
Warum Platzhalter beim Einfügen von 0 fehlschlagen
Die BIT-Spalte in MySQL ist ein Binärtyp, der Kompatibilitätsprobleme mit Client-Bibliotheken wie PDO verursachen kann. Das Problem tritt aus folgenden Gründen auf:
Lösung: Verwenden Sie stattdessen TINYINT(1)
Um dieses Problem zu beheben, wird eine Änderung empfohlen der Spaltentyp von BIT(1) bis TINYINT(1). Dadurch wird sichergestellt, dass jeder Zeile unabhängig vom eingefügten Wert ein einzelnes Byte zugewiesen wird. TINYINT(1) kann auch zum Speichern boolescher Werte verwendet werden, wodurch Kompatibilitätsprobleme mit BIT-Spalten beseitigt werden.
Zum Beispiel sollte der folgende Code ordnungsgemäß funktionieren:
$pdo = new PDO("connection string etc") ; $statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (?,?)') ; $statement->execute(array("TEST",0)) ;
Wenn Sie immer noch möchten Um BIT(1) zu verwenden, können Sie die folgende Problemumgehung versuchen:
$statement = $pdo->prepare('INSERT INTO `test` (SomeText,TestBool) VALUES (:someText,:testBool)') ; $statement->bindValue(':someText', "TEST"); $statement->bindValue(':testBool', 0, PDO::PARAM_INT); $statement->execute();
Der Wechsel zu TINYINT(1) ist jedoch die bevorzugte Lösung, da es ein konsistentes Verhalten über verschiedene Datentypen hinweg bietet und die Kompatibilität mit verschiedenen Clients gewährleistet Bibliotheken.
Das obige ist der detaillierte Inhalt vonWarum führt das Einfügen von 0 in ein MySQL-BIT(1)-Feld zu 1?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!