Frage MySql-Bitspalten gibt in PHP 7.1 eine seltsame große Zahl zurück (nicht in früheren Versionen)


Ich teste meine PHP-Seite, die mit PHP 5.5 entwickelt wurde, um zu sehen, ob sie mit PHP 7.1 kompatibel ist und ich fand ein sehr seltsames Problem.

Das Problem besteht darin, dass eine einfache Auswahl in einer Tabelle mit einer BIT (1) -Spalte eine 18-stellige Zahl anstelle einer 0/1 zurückgibt, die vorherige PHP-Versionen zurückgibt.

Die problematische Version ist PHP 7.1.9, die anderen Versionen, die ich ausprobiert habe, sind 5.5.12 und 7.0.23. Alle Tests wurden auf WAMP 2.5 mit Apache 2.4.9 und MySQL 5.6.17 durchgeführt.

Hier ist ein minimaler Satz von Code, um es zu replizieren.

Erstellen Sie Tabelle und Ausgangsdaten:

DROP TABLE IF EXISTS `test_bit`;
CREATE TABLE IF NOT EXISTS `test_bit` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `bit_col` BIT(1) NOT NULL DEFAULT FALSE,
  `varchar_col` VARCHAR(50) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE = InnoDB DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

INSERT INTO test_bit (bit_col, varchar_col)
VALUES (1, 'hello'), (0, 'world'), (TRUE, 'how'), (FALSE, 'are'), (NULL, 'you?');

Hier ist der PHP-Code:

<?php
$db = mysqli_connect("127.0.0.1", "root", "", "test_db");
$result = mysqli_query($db, "SELECT * FROM test_bit");
$rs = array();
while ($row = mysqli_fetch_assoc($result)) {
    $rs[] = $row;
}
var_dump($rs);
mysqli_free_result($result);

Hier sind die Ergebnisse in PHP 5.5 und 7.0

array (size=5)
  0 => 
    array (size=3)
      'id' => string '1' (length=1)
      'bit_col' => string '1' (length=1)
      'varchar_col' => string 'hello' (length=5)
  1 => 
    array (size=3)
      'id' => string '2' (length=1)
      'bit_col' => string '0' (length=1)
      'varchar_col' => string 'world' (length=5)
  2 => 
    array (size=3)
      'id' => string '3' (length=1)
      'bit_col' => string '1' (length=1)
      'varchar_col' => string 'how' (length=3)
  3 => 
    array (size=3)
      'id' => string '4' (length=1)
      'bit_col' => string '0' (length=1)
      'varchar_col' => string 'are' (length=3)
  4 => 
    array (size=3)
      'id' => string '5' (length=1)
      'bit_col' => string '0' (length=1)
      'varchar_col' => string 'you?' (length=4)

Und hier ist das Ergebnis in PHP 7.1

array (size=5)
  0 => 
    array (size=3)
      'id' => string '1' (length=1)
      'bit_col' => string '326352660489830401' (length=18)
      'varchar_col' => string 'hello' (length=5)
  1 => 
    array (size=3)
      'id' => string '2' (length=1)
      'bit_col' => string '326352866648260608' (length=18)
      'varchar_col' => string 'world' (length=5)
  2 => 
    array (size=3)
      'id' => string '3' (length=1)
      'bit_col' => string '326353072806690817' (length=18)
      'varchar_col' => string 'how' (length=3)
  3 => 
    array (size=3)
      'id' => string '4' (length=1)
      'bit_col' => string '326353278965121024' (length=18)
      'varchar_col' => string 'are' (length=3)
  4 => 
    array (size=3)
      'id' => string '5' (length=1)
      'bit_col' => string '326353485123551232' (length=18)
      'varchar_col' => string 'you?' (length=4)

Die Zahlen in der 'bit_col' in PHP 7.1 ändern die ersten ein oder zwei mal Ich setze PHP 7.1 als meine Serverversion und bleibe dann gleich (bis ich zu 7.0 oder 5.5 wechsel und dann wieder zu 7.1 zurückkomme). Sie scheinen wie ein Zeitstempel oder etwas ähnliches zu sein.

Jede Hilfe wäre sehr willkommen.


8
2017-09-01 22:03


Ursprung


Antworten:


Es ist tatsächlich ein bereits gemeldetes Problem in PHP seit dem 1. August.

PHP Fehler # 75018 

Es scheint nur für die Windows-Plattform zu sein, wie einige Kommentare vorgeschlagen haben.


5
2017-09-03 16:48



Heute stand ich auf armv7 vor demselben Problem.

Laut Bug # 75018 und die damit verbundenen verpflichten Ich habe mysqlnd_wireprotocol.c repariert, PHP neu kompiliert und jetzt funktioniert es wie erwartet.

Also Lösung ist:

  • Warte auf neue PHP-Version (mit Fix)
  • Kompilieren Sie das neueste PHP aus Quellen, die das erforderliche Update anwenden

2
2017-09-24 17:35