Запрос PHP PDO к DB2 возвращает NULL в CLI, но данные через APACHE

#php #pdo #db2

Вопрос:

Я устанавливаю соединение с экземпляром DB2 через PHP -> PDO ->> ODBC и выполняю супер простой запрос:

 <?php
$sql = "SELECT COL2, HEX(COL2) from DB.TABLE WHERE COL1 = '12345'";
$connDb2 = new PDO("odbc:DSN=aDsn;Userid=User;Password=aPassword");
$statement = $connDb2->prepare($sql);
$statement->execute();
while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
    var_dump($row);
}
 

При запуске из CLI, если в результате есть какие-либо символы юникода, я получаю НУЛЕВОЙ результат от PDO (хотя шестнадцатеричный перевод результата в порядке).:

 array(2) {
  ["COL2"]=>
  NULL
  ["00002"]=>
string(60) "D1C1D5C5D3D3C540D4C1D5E2E2E2E2414040404040404040404040404040"
}
 

Однако, если я запущу тот же сценарий через Apache, я получу ненулевой результат:

 array(2) {
["COL2"]=>
string(30) "JANELLE MANSSSS� "
["00002"]=>
string(60) "D1C1D5C5D3D3C540D4C1D5E2E2E2E2414040404040404040404040404040"
}
 

Если символов юникода нет, результаты будут одинаковыми через интерфейс командной строки или Apache. Помогите!?!?!?!

Комментарии:

1. В какой операционной системе работает PHP? Какой языковой стандарт активен для сеанса, в котором работает PHP, и как вы можете это проверить?

2. Существуют разные файлы php.ini для CLI и Интернета. Поищите там отличия.

3. Я запускаю это под PHP 7.2.33 / Apache 2.4.43 на сервере Amazon Linux 2. При такой конфигурации в файле /etc есть только один php.ini.

4. И когда вы запускаете его с помощью CLI, тот же пользователь запускает исполняемый файл, когда это делает Apache? В противном случае может измениться языковой стандарт.