1

私は自分のサーバー上のプロジェクトでPHPを使用してMySQLデータベースに何度もアクセスし、常に同じPHPスクリプトを使用してアクセスしています(ログインの詳細を明らかに変更しています)。ただし、Heroku&ClearDBを使用するのはこれが初めてであり、問​​題が発生しました。

DBはClearDBを使用するHerokuPHPアプリ上にあり、CLEARDB_DATABASE_URLにアクセスして、ユーザー名、パスワード、ホスト名、およびデータベース名を確認しました。私が正しくそれを行ったことを確認するために、私の理解はこれがフォーマットであるということです:

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

MySQL Workbenchでこれらの詳細を使用して、DBにログインし、テーブルを追加することができたので、これらは正しい詳細であると思います。

ただし、同じ変数をURLから取得して、PHPスクリプトを使用してアクセスしようとすると、次のエラーが発生します。

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エラーの原因はDBベースの関数だけです。

私はありとあらゆる提案を受け入れます...

4

1 に答える 1

1

同じ問題を抱えている人のために、私はこれを修正しましたが、100%確実ではありません、それは2つの可能なもののうちの1つでした。まず、カスタムビルドパックを使用してHerokuアプリを再構築しました。最初はうまくいかなかったので、答えではないと思いました。次に、Herokuアプリを2週間離れました...そして突然、mySQLiと互換性がありました!

カスタムビルドパックDIDが機能し、アクティブになるのに時間が必要だったか、Herokuが最後に変更を加えて、問題が修正されました。

より良い答えを提供できないことをお詫びしますが、私が言うように、Herokuアプリを約2週間離れた後、問題は奇跡的に修正されました。

于 2012-12-18T17:46:08.287 に答える