我仍然主要从我买的书上学习,但今天我知道我的书很旧,尽管我今年买了一本关于 PHP 编程的书。现在我知道 PHP 中的 mysql_* 命令已被弃用,应该用更安全和稳定的预处理语句和 PDO 替换。所以我让自己根据它重写我所有的网络,也许我需要你的一些建议如何正确地做到这一点,并从你们所有更有经验的人那里工作:)
所以我将在这里只用主要部分(连接到数据库并选择数据库)开始我的重写(其余的我可以用谷歌和手册自己做)。我会在这里写下我的旧脚本,并问你我是否做对了所有事情并且没有遗漏任何东西,我希望这对其他人来说也是一些很好的手册/答案。所以让我们开始吧。
所以在配置中我有这样的东西:
$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);
}
}
}
因此,根据我从 Google 和 Wiki 中了解到的信息 - 类似public function __construct
并且public function __destruct()
不再需要的功能,对吧?与public function connect()
SO 之类的功能相同,只剩下什么了,public function selectDb($database)
但我不知道如何正确地做到这一点,而不会破坏与数据库的所有连接。因为在我的其余代码(此处未提及)中,我可以通过此代码轻松选择数据库:$this->db->selectDb("people");
但是使用准备好的语句,我不知道这是否可能以简单的方式实现。我希望你的一些建议能帮助我和其他用户更好地理解这个新代码。您可能拥有的代码中的其他部分在此PDO Tutorial for MySQL Developers中进行了说明。谢谢你。