我一直试图解决这个问题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中,它使用PDO调用此sql语句:
$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错误
我无法弄清楚为什么语句不返回任何错误但在作为命令行程序运行时不更新行
我意识到这是一个复杂的情况 - 如果我需要发布其他信息以澄清任何内容,请告诉我。