2

すべてのデータベース関連の構成 (ホスト名、ユーザー名、パスワード、およびデータベース) と、別のクラスで正しいデータベースに接続して選択する機能を保持することは可能ですか?

私はこのようなことを試しました:

class Database
{
    var $config = array(
        'username' => 'someuser',
        'password' => 'somepassword',
        'hostname' => 'some_remote_host',
        'database' => 'a_database'
    );
    function __construct() {
        $this->connect();
    }
    function connect() {
        $db = $this->config;
        $conn = mysql_connect($db['hostname'], $db['username'], $db['password']);
        if(!$conn) {
            die("Cannot connect to database server"); 
        }
        if(!mysql_select_db($db['database'])) {
            die("Cannot select database");
        }
    }
}

そして、クラス __construct 関数で使用する別のクラスで:

require_once('database.php');
var $db_conn = new Database();

しかし、これは接続を保存しません。サーバーのローカル db 接続がデフォルトになります。または、いくつかのデータベース コマンドを実行する前に、毎回データベース コマンドを実行する必要がありますか?

4

4 に答える 4

0

接続情報を別のファイルに保存できます。

接続オブジェクト ( connect() 関数の $conn ) をクラス変数に保存するだけです。その後、呼び出し間で再利用できます。

于 2009-07-29T20:15:57.503 に答える
0

メソッド connect() $conn は、そのメソッドのスコープ内にのみ存在するローカル変数にすぎません。メソッドが戻るとすぐに、接続リソースへの (その他の) 参照はなくなり、収集/破棄されます。少なくとも必要です

$this->conn = mysql_connect(...)
于 2009-07-29T20:17:07.970 に答える
0

PDO を使用したシングルトンの例を次に示します。@hodobave に感謝

<?php 

/**
 * DB Connection class
 * Singleton pattern
 * An single instance of DB connection is created
**/

class Db{

    protected static $_instance = null;
    protected $_conn;

    protected $_config = [
        'username' => 'root',
        'password' => '',
        'hostname' => 'localhost',
        'database' => 'news',
    ];
    protected function __construct(){

    }

    public function getInstance(){
        if(null === self::$_instance){
            self::$_instance = new self();
        }
        return self::$_instance;
    }

    public function getConnection(){
        if(is_null($this->_conn)){
            //connect here
            $db = $this->_config;
            $dsn = "mysql:host={$db['hostname']};dbname={$db['database']}";
            $this->_conn = new PDO($dsn, $db['username'], $db['password']);
        }
        return $this->_conn;
    }

    public function query($sql){
        $args = func_get_args();
        array_shift($args);
        $statement = $this->getConnection()->prepare($sql);
        $statement->execute($args);
        return $statement->fetchAll(PDO::FETCH_OBJ);
    }
}



$res = Db::getInstance();
$users = $res->query("SELECT * FROM `user` WHERE id=?",1);
print_r($users);
?> 
于 2016-10-14T12:17:43.220 に答える