1

さまざまなphpファイルがデータベースに接続するために呼び出すことができるphp関数にmysqli接続スクリプトを入れてみました。次の関数を作成しました。

public function connectToDatabase() {

    $con = mysqli_connect($databaseHost, $databaseUsername, $databasePassword, $databaseName);

    echo "<br><br>";

    if (mysqli_connect_errno($con)) {
        echo "Failed to connect to MySQL:" . mysqli_connect_error();
    } else {
        echo "Connection successful";
    }

    return $con;
}

次に、別のファイルからその関数を呼び出します (上記のファイルが含まれています)。

$con = connectToDatabase();

ただし、 top 関数のコードは正常に機能しますが、変数 $con で接続を渡すことは機能していないようです。returnステートメントに到達すると、接続が自動的に閉じられることがわかりました。これは事実ですか?もしそうなら、どうすればそれを止めることができますか?

どうもありがとう

4

1 に答える 1

1

問題はコメントで回答されていますが、接続を Singleton クラスとして構造化することをお勧めします。これにより、コード全体で接続の複数のインスタンスを開かないようにすることができます。

class DatabaseConnection {

    const HOST     = 'localhost';
    const USERNAME = 'not_root';
    const PASSWORD = 'not_blank';
    const NAME     = 'your_db';

    private static $_instance;

    // Private constructor prevents instantiation
    private function __construct() {
    }

    public static function getInstance() {
        if (!self::$_instance) {
            self::$_instance = mysqli_connect(self::HOST, self::USERNAME, self::PASSWORD, self::NAME);
            if (mysqli_connect_errno(self::$_instance)) {
                throw new Exception("Failed to connect to MySQL:" . mysqli_connect_error());
            }
        }
        return self::$_instance;
    }
}

次に、次のように呼び出します。

try {
    $con = DatabaseConnection::getInstance();
} catch (Exception $e) {
    // Handle exception
    echo $e->getMessage();
}
于 2013-06-16T10:06:01.017 に答える