Heim > Datenbank > MySQL-Tutorial > Warum sind die Ergebnisse meiner numerischen PHP-MySQL-Spalte manchmal Zeichenfolgen statt Ganzzahlen oder Gleitkommazahlen?

Warum sind die Ergebnisse meiner numerischen PHP-MySQL-Spalte manchmal Zeichenfolgen statt Ganzzahlen oder Gleitkommazahlen?

DDD
Freigeben: 2024-12-10 16:18:10
Original
924 Leute haben es durchsucht

Why are my PHP MySQL numeric column results sometimes strings instead of integers or floats?

Ganzzahlen und Zahlen als Typen in PHP von MySQL zurückgeben

Obwohl PDO::ATTR_STRINGIFY_FETCHES auf „false“ gesetzt ist, können bei numerischen Spalten Probleme auftreten werden weiterhin als Zeichenfolgen anstelle von Ganzzahlen oder Zahlen zurückgegeben. Dieses Verhalten wird häufig auf ein Treiberimplementierungsproblem zurückgeführt.

Der Mysqlnd-Unterschied

Der Schlüssel zur Lösung dieses Problems liegt darin, sicherzustellen, dass Sie Mysqlnd verwenden Treiber für PHP. Wenn Sie php -i anzeigen, weist das Fehlen von „mysqlnd“ im Abschnitt pdo_mysql darauf hin, dass stattdessen der native Treiber verwendet wird.

Mysqlnd installieren

Auf Ubuntu installieren php5-mysqlnd statt php5-mysql. Um einen erfolgreichen Übergang sicherzustellen, befolgen Sie diese Schritte:

  1. Entfernen Sie den alten Treiber: apt-get remove php5-mysql
  2. Installieren Sie den neuen Treiber: apt-get install php5-mysqlnd
  3. Apache neu starten: Service Apache2 Neustart

Mysqlnd überprüfen

Bei der Installation von php5-mysqlnd sollte php -i jetzt explizit „mysqlnd“ im Abschnitt pdo_mysql erwähnen.

PDO Einstellungen

Legen Sie die folgenden PDO-Attribute fest, um eine ordnungsgemäße Datenverarbeitung sicherzustellen:

  • PDO::ATTR_EMULATE_PREPARES: false
  • PDO::ATTR_STRINGIFY_FETCHES: false

Zurückgegeben Werte

Mit dem richtigen Treiber und den richtigen Einstellungen werden numerische Spalten als entsprechende PHP-Typen zurückgegeben:

  • Gleitkommatypen (FLOAT, DOUBLE): PHP-Floats
  • Integer-Typen (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT): PHP ganze Zahlen
  • Festkommatypen (DEZIMAL, NUMERISCH): Zeichenfolgen
    (Hinweis: BIGINTs, die einen 64-Bit-Int mit Vorzeichen überschreiten, werden auf 64-Bit-Systemen als Zeichenfolgen zurückgegeben.)

Zum Beispiel folgende Daten:

+-----------+-----------+----------+-------------+--------------+
| integer_col | double_col | float_col | decimal_col | bigint_col    |
+-----------+-----------+----------+-------------+--------------+
| 1          | 1.55      | 1.5      | 1.20        | 18446744073709551615 |
+-----------+-----------+----------+-------------+--------------+
Nach dem Login kopieren

Werden zurückgegeben als:

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)
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum sind die Ergebnisse meiner numerischen PHP-MySQL-Spalte manchmal Zeichenfolgen statt Ganzzahlen oder Gleitkommazahlen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage