sql >> Databasteknik >  >> RDS >> Mysql

Hur returnerar jag heltal och numeriska kolumner från MySQL som heltal och numeriska i PHP?

Lösningen är att se till att du använder mysqlnd drivrutin för php.

Hur vet du att du inte använder mysqlnd?

När du tittar på php -i , kommer det att finnas nej omnämnande av "mysqlnd". pdo_mysql avsnitt kommer att ha något sånt här:

pdo_mysql

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

Hur installerar du det?

De flesta installationsguider för L/A/M/P föreslår apt-get install php5-mysql men den inbyggda drivrutinen för MySQL är installerad av ett annat paket:php5-mysqlnd . Jag upptäckte att detta var tillgängligt med ppa:ondrej/php5-oldstable .

För att byta till den nya drivrutinen (på Ubuntu):

  • Ta bort den gamla drivrutinen:
    apt-get remove php5-mysql
  • Installera den nya drivrutinen:
    apt-get install php5-mysqlnd
  • Starta om apache2:
    service apache2 restart

Hur kontrollerar jag att drivrutinen används?

Nu php -i kommer att nämna "mysqlnd" uttryckligen i pdo_mysql avsnitt:

pdo_mysql

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

PDO-inställningar

Se till att PDO::ATTR_EMULATE_PREPARES är false (kontrollera dina standardinställningar eller ställ in det):
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

Se till att PDO::ATTR_STRINGIFY_FETCHES är false (kontrollera dina standardinställningar eller ställ in det):
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

Returnerade värden

  • Flytande kommatyper (FLOAT, DOUBLE) returneras som PHP-flytande.
  • Heltalstyper (INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT †) returneras som PHP-heltal.
  • Fastpunktstyper (DECIMAL, NUMERISK) returneras som strängar.

† BIGINTs med ett värde större än en 64-bitars signerad int (9223372036854775807) kommer att returneras som en sträng (eller 32 bitar på ett 32-bitarssystem)

    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)


  1. Hur man hittar n:e raden i MySQL

  2. Undviker SQL-injektion utan parametrar

  3. Hitta orsaken till dödlägesfel från oracle trace-fil

  4. Dynamisk kolumn i SELECT-sats postgres