gpt4 book ai didi

php - 通过 bash 脚本运行 php 脚本时出现 MySQL 数据库连接错误

转载 作者:行者123 更新时间:2023-11-29 09:03:11 24 4
gpt4 key购买 nike

我目前有一个包含以下代码的 bash 脚本,用于简单地执行 PHP 脚本(通过 cron 作业):

php path/to/my/file.php

然后该 PHP 脚本会执行一系列随机操作。其中之一是使用配置文件连接到 MySQL 数据库,然后运行 ​​SQL 语句来更改数据库。但是,我不断收到如下错误:

PHP Warning: mysql_query(): Access denied for user ''@'localhost' (using password: NO) in /opt/local/www/example.com/assets/classes/Importer.php on line 109
PHP Warning: mysql_query(): A link to the server could not be established in /opt/local/www/example.com/assets/classes/Importer.php on line 109

bash脚本和PHP文件都存储在同一台服务器上。尽管通过浏览器访问同一文件成功连接到数据库,但通过 bash 命令运行的 PHP 脚本无法连接到数据库,是否有原因?

奇怪的部分是,错误正确地从配置文件中获取“localhost”作为服务器名称,但由于某种原因,没有对存储在其中的数据库用户名和密码执行相同的操作。

编辑:在下面添加代码

下面的代码是从上面提到的 file.php 运行的。

    public function __construct()
{
// We need to manually include these classes since they are being run from a bash script
require_once('core.php');
}

core.php(在上面的代码块中提到)有以下代码:

// Include environment-specific configuration file
require_once 'config.php';

// TODO: Move this to Core::getDatabase();
$database = new Database(Core::getApplication()->getDbHost(), Core::getApplication()->getDbUser(), Core::getApplication()->getDbPass(), Core::getApplication()->getDbName());

config.php 是“localhost”变量以及数据库用户名和密码的来源

编辑#2:我不认为这是文件路径问题,因为正确的文件是从配置中获取的,并在 mysql_connect() 调用中创建,通过在该调用之前输出它们来确认。看起来它正在连接到一个文件中的数据库,然后在运行查询时忘记了它或其他东西......?

编辑#3:我想我已经明白了。正在调用 Database 类的析构函数并与数据库断开连接。我注释掉了断开连接,现在它似乎正在工作。我必须弄清楚为什么会这样调用。

最佳答案

这可能是当前目录的问题。它可能会在当前目录中查找配置文件,而当您通过 bash 运行它时,该目录是不同的。

你可能正在做:

require('config.php');

并假设 config.php 位于同一目录中 - 但这不是它的工作方式,它在当前目录中查找,而不是与 php 文件在同一目录中。

而是使用 __FILE__ 定义来确定您所在的位置,并根据该值获取绝对路径。像这样的事情:

require(dirname(__FILE__) . 'config.php');

关于php - 通过 bash 脚本运行 php 脚本时出现 MySQL 数据库连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7922761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com