Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie gebe ich ganzzahlige und numerische Spalten aus MySQL als ganze Zahlen und Zahlen in PHP zurück?

Die Lösung besteht darin sicherzustellen, dass Sie mysqlnd verwenden Treiber für php.

Woher wissen Sie, dass Sie nicht mysqlnd verwenden?

Beim Anzeigen von php -i , gibt es keine Erwähnung von "mysqlnd". Die pdo_mysql Abschnitt wird etwa so aussehen:

pdo_mysql

PDO Driver for MySQL => enabled Client API version => 5.1.72

Wie wird es installiert?

Die meisten Installationsanleitungen für L/A/M/P schlagen apt-get install php5-mysql vor aber der native Treiber für MySQL wird von einem anderen Paket installiert:php5-mysqlnd . Ich fand heraus, dass dies mit ppa:ondrej/php5-oldstable verfügbar war .

So wechseln Sie zum neuen Treiber (unter Ubuntu):

  • Entfernen Sie den alten Treiber:
    apt-get remove php5-mysql
  • Installieren Sie den neuen Treiber:
    apt-get install php5-mysqlnd
  • Apache2 neu starten:
    service apache2 restart

Wie überprüfe ich, ob der Treiber verwendet wird?

Jetzt php -i wird "mysqlnd" explizit in pdo_mysql erwähnen Abschnitt:

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.10 - 20111026 - $Id:      e707c415db32080b3752b232487a435ee0372157 $

PDO-Einstellungen

Stellen Sie sicher, dass PDO::ATTR_EMULATE_PREPARES ist false (überprüfen Sie Ihre Standardeinstellungen oder setzen Sie sie):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Stellen Sie sicher, dass PDO::ATTR_STRINGIFY_FETCHES ist false (überprüfen Sie Ihre Standardeinstellungen oder setzen Sie sie):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Zurückgegebene Werte

  • Gleitkommatypen (FLOAT, DOUBLE) werden als PHP-Floats zurückgegeben.
  • Integer-Typen (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) werden als PHP-Integer zurückgegeben.
  • Festkommatypen (DECIMAL, NUMERIC) werden als Strings zurückgegeben.

† BIGINTs mit einem Wert größer als ein 64-Bit-Int mit Vorzeichen (9223372036854775807) werden als Zeichenfolge zurückgegeben (oder 32 Bit auf einem 32-Bit-System)

    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)