【问题标题】:ClearDB / Heroku 500 error when trying to access database via PHP尝试通过 PHP 访问数据库时出现 ClearDB / Heroku 500 错误
【发布时间】:2012-12-19 01:46:08
【问题描述】:

对于我们自己服务器上的项目,我曾多次使用 PHP 访问 MySQL 数据库,并且总是使用相同的 PHP 脚本来访问(显然更改了登录详细信息)。然而,这是我第一次使用 Heroku 和 ClearDB,我遇到了问题。

数据库位于我们的 Heroku PHP 应用程序上,使用 ClearDB,我访问了 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 错误消息,但只有基于 DB 的函数会导致 500 错误。

我愿意接受任何和所有建议...

【问题讨论】:

  • HTTP 错误 500 -> 您需要查看网络服务器的错误日志以了解更多信息。如果这与您的 PHP 脚本有关,您应该启用 PHP 错误日志并查看 PHP 错误日志以获取更多信息。
  • 有道理,我有一个早晨,明显的想法并不那么明显。日志似乎说mysqli有问题:“打开失败需要'classes/class_mysqli.php'”。 heroku 不支持 myslqi 吗?
  • 那是你的 PHP 文件(不是 PHP 扩展)。我建议给自己喝杯咖啡;)然后检查出现该错误的文件和行。
  • 大声笑这是因为我的 index.php 文件中缺少这个“#!/usr/bin/php”。谢谢你告诉我醒来,我会投票给你的 cmets :-)
  • 它看起来是 your mysqli 类,而不是 PHP 的类。或者您是否使用自动加载器生成该文件名?设置一个phpinfo() 并检查你有哪些可用的扩展。

标签: php mysql heroku


【解决方案1】:

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

自定义 buildpack 可以正常工作,只是需要时间来激活,或者 Heroku 在他们的最后进行了更改,从而解决了我的问题。

抱歉,我无法提供更好的答案,但正如我所说,在离开 Heroku 应用大约 2 周后,问题奇迹般地得到了解决。

【讨论】:

  • 您能告诉我们那个自定义构建包是什么吗?
  • 我想是这个github.com/travstoll/heroku-buildpack-php 但是那是一年多以前的事了,所以我可能错了,或者构建包可能已经改变了。
猜你喜欢
  • 2019-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2019-04-05
  • 2017-09-28
相关资源
最近更新 更多