我仍然主要是从我买的书中学习,但今天我了解到我的书是旧的,尽管我今年买了一本关于PHP编程的书。现在我知道PHP中的mysql_*命令已经被弃用了,应该用更安全、更稳定的预准备语句和PDO来代替。因此,我把自己放在根据它重写我的所有网站,也许我会需要你的一些建议,如何正确地做,并从你们所有更有经验的人工作:)
所以我将在这里开始我的重写,只有main部分(连接到db并选择DB) (剩下的部分我可以用google和手册自己完成)。我将在这里写我的旧脚本,并询问您我是否做得一切都正确,没有遗漏任何东西,我希望这也能成为其他人的一些很好的手册/答案。那么让我们开始吧。
所以在config中我有这样的东西:
$db = new dbConn('127.0.0.1', 'root', 'pass', 'people', 'animals');
应该是这样的:
$db = new PDO('mysql:host=127.0.0.1;dbname=people;charset=UTF-8', 'root', 'pass');
对吗?但是当我以后需要选择数据库时,我应该在没有dbname=people;
的情况下进行吗?但是以后如何选择数据库呢?
这是我唯一要重写的脚本,它是大多数web项目的基础,我希望它不仅能让我理解新的PDO系统是如何真正工作的:
class dbConn
{
public function __construct($server, $user, $pass, $db_people, $db_animals)
{
if (!empty($server) && !empty($user) && !empty($pass) && !empty($db_people) && !empty($db_animals))
{
$this->server = $server;
$this->user = $user;
$this->pass = $pass;
$this->db_people = $db_people;
$this->db_animals = $db_animals;
$this->connect();
}
else
{
die("Set up connection to db");
}
}
public function connect()
{
$this->conn = mysql_connect($this->server, $this->user, $this->pass) or die ('cannot connect to MySQL');
}
public function selectDb($database)
{
switch($database)
{
case 'people':
mysql_select_db($this->db_people, $this->conn) or die ('cannot connect to database '.$this->db_people.'.');
mysql_query("SET NAMES 'utf8'");
break;
case 'animals':
mysql_select_db($this->db_animals, $this->conn) or die ('cannot connect to database '.$this->db_animals.'.');
mysql_query("SET NAMES 'utf8'");
}
}
public function __destruct()
{
if (!empty($this->conn))
{
mysql_close($this->conn);
}
}
}
所以根据我从谷歌和维基的了解,像public function __construct
和public function __destruct()
这样的功能应该不再需要了,对吧?像public function connect()
这样的函数也是如此,所以只剩下public function selectDb($database)
了,但是我不知道如何在不破坏所有数据库连接的情况下正确地做到这一点。因为在我的其余代码中(这里没有提到),我可以很容易地通过以下代码选择数据库:$this->db->selectDb("people");
,但是对于预准备语句,我不知道这是否可能以一种简单的方式实现。我希望你的一些建议能帮助我和其他用户更好地理解这个新代码。你可能已经在这个PDO Tutorial for MySQL Developers中解释了代码中的其他部分。谢谢。
https://stackoverflow.com/questions/10919277
复制相似问题