Я пытался понять это в течение 2 дней. Вот сценарий:
функция в notificaton_system.php запускается, и если выполняются определенные условия, она запускает это:
$cmd = 'php -f /var/www/site.com' . $system_file . ' /file:"' . $file . '" /environment:"' . $application_env . '"';
$update_data = exec($cmd, $out, $retvar);
return $update_data;
внутри $ system_file он имеет этот SQL-оператор, вызываемый с использованием PDO:
$sql = '
update
`USER`.t_pto_request
set status_code = :pto_status
where
request_id = :update_id;
';
после выполнения этого оператора я получаю сообщения об ошибках:
$error_arr = $stmt->errorInfo();
print_r($error_arr);
это всегда показывает без ошибок:
Array(
[0] => 00000
[1] =>
[2] =>
)
затем он выбирает строку и выводит ее:
$sql_2 = '
select
request_id,
user_id,
status_code
from
`USER`.t_pto_request
where
request_id = :update_id;
';
однако строка НЕ обновляется (я проверял много раз), и она всегда выводит пустой массив, когда пытается выбрать строку, которую предполагалось обновить.
если я бегу точно такой же запрограммируйте непосредственно в браузере и передайте значения через строку запроса вместо аргументов командной строки:
https://www.oursite.com/path/to/file/system_file.php?file=/path/to/sys_file.txt&environment=dev
Это делает работа и строка обновляется. В обоих случаях используется один и тот же пользователь MySQL (запускается напрямую в браузере, а не из командной строки из другой программы PHP).
Я не получаю ошибок PHP или PDO в любом случае
Я не могу понять, почему оператор не будет возвращать ошибок, но не будет обновлять строку при запуске в качестве программы командной строки
Я понимаю, что это сложный сценарий. Пожалуйста, дайте мне знать, если мне нужно опубликовать дополнительную информацию, чтобы что-то прояснить.
Задача ещё не решена.
Других решений пока нет …