0

MySQL から MySQLi および OO コードに移行した後、最初の DB クラスの作成を開始しました。多数のチュートリアルを読んだ後、単純なパズルが残りました。私のコードは MySQL への 2 つの接続を開くのでしょうか?もしそうなら、どうすればそれを防ぐことができるでしょうか? 私は現在、一般的なユーザー データ用に 1 つのテーブル (azgoth_en) を使用し、セッション データ用に別のテーブル sess を使用しています (そのための 2 番目のクラスを構築しています)。私のコードは次のとおりです。

class db {
        protected $connection, $lang;

        [...]

        function __construct($db='azgoth_en',$lang='en',$host='localhost',$uz='root',$pw='') {
            $this->lang=$lang;
            $mysqli=mysqli_connect($host,$uz,$pw,$db);
            if ($mysqli) {
                $this->connection=$mysqli;
                unset($mysqli);
            }
            else die('Mysql failed ('.mysqli_errno($mysqli).'): '.mysqli_error($mysqli));
        }       
    }

    class sessions extends db {
        var $connection;

        function open() {return true;}
        function close() {return true;}

        function read($id){
        $foo=$this->connection;
        var_dump($foo);
        #echo '_read var dump: ',var_dump(parent::query("SELECT * FROM sess")),'<hr>';
        #$id=parent::connection->real_escape_string($id);
        /*$result=mysqli_query($langCon,"SELECT `data` FROM `sess` WHERE `id`='{$id}' LIMIT 1");
        if ($result && mysqli_num_rows($result)) {
            echo '_read result found<hr>';
            $record = mysql_fetch_assoc($result);
            return $record['data'];
        } */
        return null;
        }
    }
    $db=new db;
    $sessions=new sessions;

ほとんどの人にとってこれが常識のように思えるかもしれませんが、私が読んだすべてのチュートリアルでは、静的メソッド/変数の継承についてのみ言及されており、ここで実際に遭遇したことについては何も言及されていません。

4

1 に答える 1

1

オブジェクトをインスタンス化するたびに接続を開きます。

$db1 = new db;
$db2 = new db;
$db3 = new db;

3 つの別々の接続を持つ 3 つの db オブジェクトが得られます。db オブジェクトがインスタンス化された回数に関係なく、SINGLE db 接続のみが必要な場合は、singletonの使用を検討する必要があります。

于 2012-06-19T18:30:18.637 に答える