Heim > Artikel > Backend-Entwicklung > Warum werden numerische MySQL-Spalten in PHP als Zeichenfolgen zurückgegeben und wie kann ich sicherstellen, dass sie als Ganzzahlen oder Gleitkommazahlen zurückgegeben werden?
Einige PHP-basierte Anwendungen können auf ein Problem stoßen Die Ergebnisse von MySQL-Abfragen werden als Zeichenfolgen und nicht als korrekte ganzzahlige oder numerische Datentypen zurückgegeben. Dies geschieht, obwohl das PDO-Attribut PDO::ATTR_STRINGIFY_FETCHES auf „false“ gesetzt ist, um die Umwandlung von Zeichenfolgen zu verhindern.
Es ist wichtig zu beachten, dass der MySQL-Treiber eine wichtige Rolle bei der Bestimmung spielt, ob numerische Typen vorhanden sind werden als Ganzzahlen oder Zahlen zurückgegeben. Einige Treiber, wie zum Beispiel der native MySQL-Treiber unter Linux, unterstützen diese Funktion nicht vollständig.
Der mysqlnd-Treiber jedoch, der für Linux-Distributionen über Repositorys von Drittanbietern verfügbar ist, tut dies unterstützen diese Fähigkeit. Es ist wichtig sicherzustellen, dass der mysqlnd-Treiber in Ihrer PHP-Umgebung verwendet wird.
Um vom nativen MySQL-Treiber zu mysqlnd unter Ubuntu zu wechseln, Befolgen Sie diese Schritte:
Bestätigen Sie dies nach der Installation von mysqlnd Es wird durch Ausführen von php -i verwendet. Suchen Sie im Abschnitt pdo_mysql nach dem folgenden Eintrag:
PDO Driver for MySQL => enabled Client API version => mysqlnd 5.0.10 - 20111026 - $Id: e707c415db32080b3752b232487a435ee0372157 $
Stellen Sie sicher, dass die folgenden PDO-Attribute korrekt eingestellt sind:
Sobald diese Einstellungen konfiguriert sind, gibt MySQL numerische Typen zurück als folgt:
Zum Beispiel das Folgende PHP-Code gibt die erwarteten Datentypen aus:
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); $stmt = $pdo->prepare("SELECT * FROM table"); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_OBJ); echo "<pre class="brush:php;toolbar:false">"; print_r($row); echo "";
Ausgabe:
object(stdClass)[915] public 'integer_col' => int 1 public 'double_col' => float 1.55 public 'float_col' => float 1.5 public 'decimal_col' => string '1.20' (length=4) public 'bigint_col' => string '18446744073709551615' (length=20)
Das obige ist der detaillierte Inhalt vonWarum werden numerische MySQL-Spalten in PHP als Zeichenfolgen zurückgegeben und wie kann ich sicherstellen, dass sie als Ganzzahlen oder Gleitkommazahlen zurückgegeben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!