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?

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?

Susan Sarandon
Susan SarandonOriginal
2024-11-24 11:21:14507Durchsuche

Why are MySQL numeric columns returned as strings in PHP, and how can I ensure they are returned as integers or floats?

So geben Sie ganzzahlige und numerische Spalten von MySQL als PHP-Ganzzahlen und -Zahlen zurück

Problembeschreibung

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.

Überlegungen zum Treiber

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.

Mysqlnd-Treiber unter Ubuntu installieren

Um vom nativen MySQL-Treiber zu mysqlnd unter Ubuntu zu wechseln, Befolgen Sie diese Schritte:

  1. Deinstallieren Sie den nativen Treiber: apt-get remove php5-mysql
  2. Installieren Sie den mysqlnd-Treiber: apt-get install php5-mysqlnd
  3. Starten Sie Apache neu: service apache2 restart

Treiber überprüfen Verwendung

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 $

PDO-Einstellungen

Stellen Sie sicher, dass die folgenden PDO-Attribute korrekt eingestellt sind:

  • PDO::ATTR_STRINGIFY_FETCHES : Auf „false“ setzen, um Zeichenfolgen zu verhindern Casting.
  • PDO::ATTR_EMULATE_PREPARES: Auf „false“ setzen, um die Leistung zu verbessern.

Zurückgegebene Werttypen

Sobald diese Einstellungen konfiguriert sind, gibt MySQL numerische Typen zurück als folgt:

  • Gleitkommatypen (FLOAT, DOUBLE) als PHP-Floats
  • Ganzzahltypen (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT) als PHP-Ganzzahlen
  • Festkommatypen (DECIMAL, NUMERIC) als Zeichenfolgen (Bigints mit Werten über 64 Bit). kann auch als Strings zurückgegeben werden)

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn