Die einzige ähnliche Frage, die ich gefunden habe, ist: Insert php boolean into mysql bit column with Zend_Db, aber das hat keine Antwort.MySQL PDO Fehler: 'Daten zu lang für Spalte' bei der Übergabe eines booleschen Parameters für eine BIT-Spalte
Bitte siehe unten vereinfachter Test:
'Allow' Spalte Typ BIT ist.
Der Spaltentyp 'roleID' ist INT.
Der Spaltentyp 'permID' ist INT.
$dbo = new PDO("mysql:dbname=database;host=127.0.0.1", "phpuser", "pass");
$query = $dbo->prepare("INSERT INTO ws_role_perms (allow, roleID, permID)
VALUES (:allow, :roleID, :permID)");
$query->bindValue("allow", true, PDO::PARAM_BOOL);
$query->bindValue("roleID", 1, PDO::PARAM_STR);
$query->bindValue("permID", 2, PDO::PARAM_STR);
if ($query->execute() == false) {
throw new Exception(print_r($query->errorInfo(), true));
}
Die Fehlermeldung, die ich erhalten ist:
Array (
[0] => 22001
[1] => 1406
[2] => Data too long for column 'allow' at row 1
)
Wenn ich die entsprechende Abfrage direkt in MySQL zu setzen versuchen, das heißt durch die Abfrage ausgeführt wird: INSERT INTO ws_role_perms (allow, roleID, permID) VALUES (true, 1, 2)
ich keine Probleme haben.
Ist das ein Fehler im MySQL PDO-Treiber, oder bin ich es nur?
Vielen Dank in Erwartung Ihrer Hilfe.
Vielen Dank für Ihre Antwort. Ich habe versucht mit: '$ query-> bindValue (" allow ", 1, PDO :: PARAM_BOOL);' Dies schlägt jedoch immer noch fehl. –
Welche MySQL-Version verwenden Sie? Und insbesondere, kennen Sie Ihren Zeichensatz? –
Ergebnisse von SHOW VARIABLES LIKE "% Version%"; ' innodb_version \t 1.1.8 protocol_version slave_type_conversions \t Version \t 5.5.22 version_comment \t MySQL Community Server (GPL) version_compile_machine \t x86 version_compile_os \t Win64 Ich verwende den Zeichensatz 'UTF8 - default collection'. –