Столбец бит MySql возвращает странное большое число в PHP 7.1 (не в предыдущих версиях)

Я тестирую свой PHP-сайт, разработанный с помощью PHP 5.5, чтобы узнать, совместим ли он с PHP 7.1, и я нашел очень странную проблему.

Проблема в том, что простой выбор таблицы с столбцом BIT (1) возвращает 18-значное число вместо 0/1, возвращающее предыдущие версии PHP.

Проблемная версия – это PHP 7.1.9, другие версии, которые я пробовал, работают нормально: 5.5.12 и 7.0.23. Все тесты проводились на WAMP 2.5 с Apache 2.4.9 и MySQL 5.6.17.

Вот минимальный набор кода для его репликации.

Создать таблицу и начальные данные:

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?'); 

Вот код PHP:

 <?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); 

Вот результаты в PHP 5.5 и 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) 

И вот результат в 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) 

Числа в «bit_col» в PHP 7.1 меняют первый или два раза. Я устанавливаю PHP 7.1 в качестве моей версии сервера, а затем остаюсь неизменным (пока я не перейду на 7.0 или 5.5, а затем снова вернусь к 7.1). Они кажутся меткой времени или чем-то вроде этого.

Любая помощь будет очень оценена.

Solutions Collecting From Web of "Столбец бит MySql возвращает странное большое число в PHP 7.1 (не в предыдущих версиях)"

Это уже уже зарегистрированная проблема в PHP с 1 августа.

Ошибка PHP # 75018

Похоже, что это только для платформы Windows, как предложили некоторые комментарии.

Сегодня я столкнулся с тем же вопросом и с armv7.

Согласно ошибке # 75018 и связанной фиксации я исправил mysqlnd_wireprotocol.c, перекомпилировал PHP, и теперь он работает так, как ожидалось.

Таким образом, решение:

  • дождитесь появления новой версии PHP (с исправлением)
  • компилировать последний PHP из источников, требующих исправления