2012-04-09 5 views
1

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.

Antwort

1

Es scheint, als würde PHP "wahr" nicht als Boolean interpretieren. PHP.NET zeigt an, dass PDO :: PARAM_BOOL eine Ganzzahl ist. Die MySQL-Interpretation einer Spalte mit datatype 'bit' änderte sich nach etwa Version 5.0. Das bedeutet, dass PHP wahrscheinlich versucht, eine vollständige Ganzzahl (32 Bit) in eine Spalte mit einer unvorhersehbaren Anzahl von Bits (1-64) einzufügen.

+0

Vielen Dank für Ihre Antwort. Ich habe versucht mit: '$ query-> bindValue (" allow ", 1, PDO :: PARAM_BOOL);' Dies schlägt jedoch immer noch fehl. –

+0

Welche MySQL-Version verwenden Sie? Und insbesondere, kennen Sie Ihren Zeichensatz? –

+0

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'. –

2

die Cast-Funktion:

Values (CAST(:allow AS UNSIGNED), :roleID, :permID) 
Verwandte Themen