PHP другой результат getttype () на Apache и IIS - PullRequest
0 голосов
/ 17 апреля 2019

Производственный сервер:

  • Windows 10 pro
  • IIS 10.0.17134.1
  • версия PHP 7.1.17

Myлокальный компьютер:

  • macOS, Mojave 10,14
  • Apache / 2.4.37 (Unix)
  • PHP версия 7.2.12

На обеих машинах я использую одно и то же приложение laravel 5.4, которое использует один и тот же источник (базу данных) на одном и том же сервере Microsoft SQL, используя sqlsrv PDO, установленный по этой ссылке .

в отчетах. table, is_active filed является типом tinyint.

На компьютере Windows:

  $report = App\Report::find(1);

  return gettype($report->is_active); //returns string

На компьютере MacOS:

  $report = App\Report::find(1);

  return gettype($report->is_active); //returns integer

Поэтому, когда я занимаюсь разработкой на своем локальном хосте и запускаю изменения в производство, при базовом сравнении происходит сбой:

 if($report->is_active === 1){
       // works on localhost, but not on production
 }

1 Ответ

0 голосов
/ 17 апреля 2019

Как Саламан A упоминание в комментарии, посмотрите на PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE.

На рабочем сервере я добавил массив options в database.php file.

  'sqlsrv' => [
        // defaults ...
        'options' => [
            PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE => true
        ]
    ],

Это решило мою проблему, теперь на обеих машинах gettype($report->is_active) return integer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...