3

データベースへの接続を確立するphpギアマンワーカーを実行しています。ただし、問題は、約 8 時間後に mysql 接続が切断され、ワー​​カーがクラッシュすることです。そのため、データベースを切断して、データベースへの新しい接続を再度作成したかったのです。

私は CDbConnection を使用して Yii のデータベースに接続していますが、"setActive(false)" が私のためにトリックを行うことを期待していました。以下では、「明示的に切断」してデータベースクエリを作成しています....クエリが例外をスローすることを期待していますが、「setActive」がまったく影響を与えず、クエリが正常に実行されることに驚いています。

    //if it fails then reconnect to the database
    Yii::app()->db->setActive(false);
    try {
        $model = MyModel::model()->findByPk(10);
        var_dump($model);
    } catch (exception $e) {
        echo "got exception -- ".$e->getMessage()."\n";
        Yii::app()->db->setActive(false);
        Yii::app()->db->setActive(true);

        // I also tried Yii::app()->db->active = true/false

        $model = MyModel::model()->findByPk(10);
        var_dump($model);
    }

CdbConnection を使用してデータベースを切断して再接続するにはどうすればよいですか?

4

1 に答える 1

1

トレースログを調べてみてください。実際には接続を閉じていると確信していCDbConnection->createCommand()ますが、クエリを実行すると再度開きます。

于 2013-06-16T22:12:19.663 に答える