0

重複の可能性:
mysql接続を閉じる(PHP)

私を助けてください、私はどこに追加するのかわかりませんmysql_close($db) ;

私のコードを参照してください:

<?php 

    class atsilipimai {

    private $db;

    public function __construct($host, $user, $password, $db) {

    $this->db = mysql_connect($host, $user, $password) or die('Couldn\'t connect to mysql');
    mysql_select_db($db) or die('Couldn\'t connect to db');
    }

    public function  addPost() {
    if ( isset($_POST['submit']) ) {
            $this->name = mysql_real_escape_string(addslashes($_POST['name']));
            $this->msg = mysql_real_escape_string(addslashes($_POST['msg']));
            $this->date = date("Y-m-d H:i:s");



            if (empty($this->name) || empty($this->msg)) {
                echo "<p>Please enter all details!</p>";
            } else {
                $sql = "INSERT INTO atsiliepimai (name, msg, date)";
                $sql .= " VALUES ('$this->name', '$this->msg', '$this->date')";
                mysql_query($sql) or die(mysql_error());

            }
        }
    }

    public function showPost() {
        //I'm not adding pagination, so it will only show last 5 posts.
        $sql = 'SELECT * FROM atsiliepimai ORDER BY id DESC LIMIT 5';
        $query = mysql_query($sql) or die('Couldn\'t get posts from database');
        while ( $row = mysql_fetch_array($query) ) {
            $this->name = htmlentities(stripslashes($row['name']));
            $this->msg = htmlentities(stripslashes($row['msg']));
            $this->date = htmlentities(stripslashes($row['date']));


            //Just add div's or what you want for the output.
            //Ip wont be added.
            echo "
            <h4>".$this->name."</h4>
            <p>".$this->msg."</p>
            <p class = 'data' >".$this->date."</p>
            <hr />
            ";

        }

    }

    public function __destruct() {



    }

    }
?>
4

3 に答える 3

3

クラスの使用はOOPではありません。関心の分離はありません。データベースアクセスを独自のクラスにカプセル化する必要があり、視覚化も分離する必要があります。destructorDB接続ハンドラーのクローズは、DBクラスので実装できます。しかし、あなたのソリューションでは、DBで動作する各オブジェクトは、独自の接続ハンドラーを持ち、レンダリングにも責任があるため、現在、クラスは単なる名前空間です...

于 2012-06-19T08:36:28.270 に答える
1

手動のmysql_closeから

非永続的なオープンリンクはスクリプトの実行の最後に自動的に閉じられるため、mysql_close()を使用する必要は通常ありません。

したがって、接続を終了してからこの関数を配置する必要がある特別な場合を除いて、それを閉じる必要はありません。

また、mysql_ *関数の非推奨の先行処理が開始されたため、データベースとの対話にはmysqli_*またはPDOを使用してください。

于 2012-06-19T08:35:55.730 に答える
1

ここでデータベースに接続しないでください。データベースとのすべての通信を処理するデータベースクラスを作成する必要があります。接続の開始(in )と終了(in)はそこで実行する必要があります。データベースユーティリティを必要とする他のクラスで、上記のクラスのオブジェクトを作成して使用するだけです。_construct()_destruct()

于 2012-06-19T08:47:42.120 に答える