我什么时候应该在班上关闭一个开放的MySQL连接?

时间:2012-06-19 08:32:09

标签: php mysql

  

可能重复:
  Close mysql connection (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() {



    }

    }
?>

3 个答案:

答案 0 :(得分:3)

使用类不是OOP。你没有分离关注点。您必须在自己的类中封装数据库访问,并且还应该分离可视化。 DB连接处理程序的关闭可以在DB类的destructor中实现。但是在你的解决方案中,每个与DB一起工作的对象都有它自己的连接处理程序,并且也可以用于渲染,所以现在你的类只是一个名称空间...

答案 1 :(得分:1)

来自手册mysql_close

  

通常不需要使用mysql_close(),因为非持久性打开链接会在脚本执行结束时自动关闭。

所以你不需要关闭它,除非你有一些特殊情况你需要终止连接然后把这个功能。

另请使用mysqli_ *或PDO与mysql_ *函数弃用preocess启动时与数据库进行交互

答案 2 :(得分:1)

您不应该在此处建立与数据库的连接。您应该创建一个数据库类来处理与数据库的所有通信,打开(在_construct() 中)并关闭(在 _destruct()中)应该在那里建立连接。您只需在需要数据库实用程序的任何其他类中创建和使用该类的对象。