尝试通过PHP访问数据库时出现ClearDB / Heroku 500错误

时间:2012-10-01 10:20:54

标签: php mysql heroku

我已经使用PHP多次访问我们自己服务器上的项目的MySQL数据库,并且总是使用相同的PHP脚本来执行此操作(显然更改登录详细信息)。不过这是我第一次使用Heroku& ClearDB和我遇到了问题。

数据库位于使用ClearDB的Heroku PHP应用程序上,我已访问CLEARDB_DATABASE_URL以查找用户名,密码,主机名和数据库名称。为了确保我已经正确完成,我的理解是这是格式:

mysql://USER_NAME:PASSWORD@HOST_NAME/DATABASE_NAME?reconnect=true

在MySQL Workbench中使用这些细节我已经设法登录数据库并添加了一个表,所以我相信它们是正确的细节。

但是,当我尝试使用我的PHP脚本访问它时,使用从URL中获取的相同变量,我收到以下错误:

HTTP Error 500 (Internal Server Error): An unexpected condition was encountered while the server was attempting to fulfill the request.

起初我认为Heroku应用程序可能已经完成了,但我仍然可以访问PHP脚本中不会尝试访问数据库的任何函数。

正如我所说,这个脚本以前一直有效,所以我不确定问题出在哪里。 我的数据库连接在一个单独的类中,具有以下构造函数:

function __construct()
{
    $this->DB_HOST     = 'us-cdbr-east-02.cleardb.com';
    $this->DB_USERNAME = 'the_username_from_url';
    $this->DB_PASSWORD = 'the_password_from_url';
    $this->DB_DATABASE = 'the_database_name_from_url';

}

使用connect()函数,根据需要调用其他类:

function connect()
{       
    self::$instance = new mysqli($this->DB_HOST, $this->DB_USERNAME, $this->DB_PASSWORD, $this->DB_DATABASE);

    if (mysqli_connect_errno()) {
        $this->raise_error(printf("Connect failed: %s\n", mysqli_connect_error()));
    }

    return self::$instance;
}

我99.9%确定问题是由尝试连接数据库引起的。即使在浏览器中测试脚本时它没有返回任何PHP错误消息,但只有基于数据库的函数才会导致500错误。

我对所有建议都持开放态度......

1 个答案:

答案 0 :(得分:1)

对于那些有同样问题的人,我已经解决了这个问题,但我不是100%肯定如何,这是2个可能的事情之一。 首先,我使用自定义buildpack重建了我的Heroku应用程序。起初这不起作用,所以我认为这不是答案。 然后我离开Heroku应用程序两个星期......突然间它与mySQLi兼容了!

自定义buildpack DID可以工作,只需要时间来激活,或者Heroku在最后修改了我的问题。

道歉,我无法提供更好的答案,但正如我所说,在离开Heroku应用程序约2周后,奇迹般地修复了问题。