PHP MySQL PDO: Wie man führende Nullen von Zerofill-Int-Spalten erhält
Ich bin noch einmal auf dem Weg der Migration vom alten auf eine Bodenwelle gestoßenmysql_*()
Funktionen zur neuen PDO-Klasse: Ich habe folgende Tabelle:
CREATE TABLE `test` (
`Id` tinyint(4) unsigned zerofill NOT NULL,
`UserName` varchar(4) NOT NULL,
`TestDecimal` decimal(6,0) unsigned zerofill DEFAULT NULL,
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Beachten Sie die Null ausgefülltId
undTestDecimal
Felder.
Wenn ich den folgenden Code ausführe, verwende ich den altenmysql_*()
Funktionen:
$SqlQuery = "SELECT * FROM test";
$Sql_Result = mysql_query($SqlQuery);
var_dump(mysql_fetch_array($Sql_Result));
Ich bekomme folgende Ausgabe mit derrichtig null ausgefülltId
Säule:
array (size=6)
0 => string '0001' (length=4)
'Id' => string '0001' (length=4)
1 => string 'alex' (length=4)
'UserName' => string 'alex' (length=4)
2 => string '000002' (length=6)
'TestDecimal' => string '000002' (length=6)
Wenn ich jedoch das gleiche mit PDO mache, wie folgt:
$SqlQuery = "SELECT * FROM test";
$SqlResult = $MysqlPDO->prepare($SqlQuery);
$SqlResult->execute();
var_dump($SqlResult->fetch(PDO::FETCH_BOTH));
Ich bekomme diese Ausgabe mit derfalsch nicht nullgefülltId
Säule:
array (size=6)
'Id' => int 1
0 => int 1
'UserName' => string 'alex' (length=4)
1 => string 'alex' (length=4)
'TestDecimal' => string '000002' (length=6)
2 => string '000002' (length=6)
Es scheint, als würde die PDO-Klasse den Spaltentyp untersuchen und einen passenden Variablentyp (in diesem Fall eine Ganzzahl) in PHP zurückgeben. Nach einigem Suchen fand ich über das herausPDO::ATTR_STRINGIFY_FETCHES
Dieses Attribut kann so eingestellt werden, dass alle MYSQL-Ergebnisse als Zeichenfolgen zurückgegeben werden. Dies scheint zwar zu funktionieren (ich erhalte eine Zeichenfolge anstelle einer Ganzzahl), es gibt jedoch immer noch keine führenden Nullen zurück:
array (size=6)
'Id' => string '1' (length=1)
0 => string '1' (length=1)
'UserName' => string 'alex' (length=4)
1 => string 'alex' (length=4)
'TestDecimal' => string '000002' (length=6)
2 => string '000002' (length=6)
Es scheint richtig zu funktionieren mit demdecimal(6,0) zerofill
Feld, aber nicht mit dertinyint(4) zerofill
field ... Gibt es eine Möglichkeit, dies zum Laufen zu bringen, oder muss ich meine Codebasis durchgehen und herausfinden, was mit dieser Änderung zu tun hat (ich habe bereits ein paar Dinge identifiziert, die nicht mehr funktionieren ...)?