来自php脚本的MySQL数据库连接错误通过bash脚本运行

时间:2011-10-27 21:38:22

标签: php mysql database bash scripting

我目前有一个带有以下代码的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文件都存储在同一台服务器上。有没有理由我的PHP脚本通过bash命令运行不会连接到数据库,尽管通过浏览器访问同一文件成功连接到数据库?

奇怪的是,错误是正确地从配置文件中获取“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'var和数据库用户名和密码来自

的地方

编辑#2:我不相信这是一个文件路径问题,因为正在从配置中获取正确的文件并在mysql_connect()调用中进行,如通过在调用之前输出它们所确认的那样。它似乎是在一个文件中连接到数据库,然后在运行查询时忘记它或什么东西......?

编辑#3:我想我弄明白了。正在调用Database类的析构函数并且正在与数据库断开连接。我评论了断开连接,现在它似乎正在工作。我将不得不弄清楚为什么会被召唤。

2 个答案:

答案 0 :(得分:1)

这可能是当前目录的一个问题。它可能正在寻找当前目录中的配置文件,当你通过bash运行它时,该目录是不同的。

你可能在做:

require('config.php');

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

而是使用__FILE__定义来确定你的位置,并根据它获得绝对路径。像这样:

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

答案 1 :(得分:1)

找出用户名为空的原因(如何分享一些代码?)。这几乎肯定会解决登录问题。您几乎可以保证在MySQL中没有“Nousername @ localhost”帐户,因此它正确地拒绝您访问。