可能的重复项:
关闭 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() {
}
}
?>
使用类不是 OOP。你没有分离的关切。您必须将数据库访问封装在自己的类中,并且可视化也应分开。可以在数据库类的destructor
中实现数据库连接处理程序的关闭。但是在您的解决方案中,与 DB 一起使用的每个对象都将有自己的连接处理程序,并且也负责呈现,因此现在您的类只是一个命名空间......
来自手动mysql_close
通常不需要使用 mysql_close(),因为非持久性开放链接会在脚本执行结束时自动关闭。
所以你不需要关闭它,除非你有一些特殊情况,你需要终止连接,然后放这个功能。
另外,请使用 mysqli_* 或 PDO 与数据库进行交互,因为 mysql_* 函数弃用预制已开始
你
不应该在这里连接到你的数据库。您应该创建一个数据库类来处理与数据库的所有通信,打开(_construct()
)和关闭(_destruct()
)连接应该在那里完成。您只需在需要数据库实用程序的任何其他类中创建和使用所述类的对象即可。