PDO在命令行中运行PHP时出现访问被拒绝错误,但在Apache中工作

PDO在命令行中运行PHP时出现访问被拒绝错误,但在Apache中工作,php,mysql,apache,pdo,command-line-interface,Php,Mysql,Apache,Pdo,Command Line Interface,几周前,我在对一段代码进行维护时遇到了一个奇怪的问题,这段代码运行得非常完美 当我通过命令行(CRON作业)运行PHP脚本时,连接到数据库的代码(我使用的是MySQL 5.7)给出以下错误: SQLSTATE[HY000][1045]拒绝用户'user'@'localhost'的访问(使用密码:YES) 这会发生在所有用户身上,无论是否使用密码,甚至是root用户 凭据是正确的。使用相同的代码(数据库连接类)生成一些web内容,效果很好。我使用的是Apache2.4,我还可以通过mysql cl

几周前,我在对一段代码进行维护时遇到了一个奇怪的问题,这段代码运行得非常完美

当我通过命令行(CRON作业)运行PHP脚本时,连接到数据库的代码(我使用的是MySQL 5.7)给出以下错误:

SQLSTATE[HY000][1045]拒绝用户'user'@'localhost'的访问(使用密码:YES)

这会发生在所有用户身上,无论是否使用密码,甚至是root用户

凭据是正确的。使用相同的代码(数据库连接类)生成一些web内容,效果很好。我使用的是Apache2.4,我还可以通过mysql cli或mysql Workbench进行连接,所以这里的凭据和权限似乎不是问题

创建PDO实例的行很简单,如下所示:

new\PDO($dsn、$username、$password、$options)

dsn类似于:

mysql:host=localhost;dbname=dbname;字符集=utf8

(也尝试使用127.0.0.1而不是localhost,但出现了相同的问题)

系统中只有一个MySQL、PHP和Apache,运行Ubuntu 16.04,所有东西都在同一台机器上

这段时间唯一改变的是OpenSSL更新,但我不知道这是否与此相关。我看到了一些关于这个错误的问题,但它们是相反的,在CLI中工作,但在apache中不工作,所以我决定提出一个新问题

更多信息:

  • Apache和CRON作业本身都由我的用户(faelv)执行
  • CRON作业命令是:
    php dispatchCLI.php task=first
  • apache和cli脚本使用相同的include(它们都实例化一个类)
  • sudo

与运行apache相比,哪个用户/组正在使用php执行cron作业?什么是cron作业php脚本和apache php脚本(它们是相同的
include
文件)?根据请求添加更多信息mysql中的用户是否对类似localhost的主机具有特定值?如果是,请尝试将其更改为
%
(表示任何主机)并查看其是否工作。mysql用户在所有数据库中都有CRUD权限(这是一台开发机器),我已经尝试使用%,但没有成功。“OpenSSL更新,但我不知道这是否相关”-听起来不太可能(预计会出现不同的错误),但是比较一下phpinfo在每种情况下对OpenSSL版本的看法(CLI和通过Apache的PHP通常使用不同的PHP.ini配置文件)