Имеется большой проект со сложной разветвлённой бизнес-логикой, работающий в связке php-fpm + nginx. В качестве БД выступает mysql. И в этом большом проекте есть маленькая такая проблема, которая, как таковая, к самому проекту никак не относится, зато проект теперь относится к ней. Очень плохо относится.
Итак:
- имеется абстрактная таблица в БД
`table` с полями
`id`,
`name`
- имеется простейший php-скрипт, который инициализирует подключение и пытается сделать выборку
<?php
//1.php
conn = mysqli_connect('localhost', 'user', 'pass', 'db_name');
$res = $conn->query('SELECT * FROM `table` WHERE `id` = 1');
var_dump($res);
mysqli_close($conn);
- имеется второй php-скрипт, который запускает первый с помощью exec()
<?php
//2.php
exec('php -f 1.php', $output);
var_dump($output);
Если теперь запустить 2-й скрипт, то все отлично отработает и $output будет не пустым. Но стоит нам только поменять выборку в 1-м скрипте таким образом, чтобы нам пришел пустой результат и опять выполнить 2-й скрипт, то всё - $output пустой (а должен быть дамп пустого объекта). Причем просто происходит "вылет" 1-го скрипта при вызове
$conn->query('SELECT * FROM `table` WHERE `id` = 2'); // пользователя с ИД = 2 не существует
без ошибки, без предупреждения и вообще вывода какой-либо информации(в логах тоже ничего). 1-й скрипт просто тихонько умирает, а 2-й вынужден показывать пустой массив. Причем такое поведение только в случае, если 1-й скрипт запустится посредством вызова exec()(shell_exec(), system()), если же 1-й скрипт вызвать из консоли ручками (php -f 1.php), то все нормально отработает: запрос ушел, а ответ пришел в виде пустого объекта.
Ну а вопрос, как обычно, вечный - кто виноват? и что делать? Может сталкивался кто? Или есть какие-то идеи?
php -
5.6.31
с mysql php общается через
mysqlnd (5.0.11-dev - 20120503)