#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? В противном случае может измениться языковой стандарт.