从MySQL迁移到MySQLi和OO代码之后,我开始创建我的第一个数据库类。经过我读过的大量教程后,我留下了一个简单的谜题:我的代码会打开两个与MySQL的连接,如果是这样,我怎么能阻止它呢?我目前正在使用一个表(azgoth_en)用于一般用户数据,另一个用于会话数据(为其构建第二个类)。我的代码如下:
class db {
protected $connection, $lang;
[...]
function __construct($db='azgoth_en',$lang='en',$host='localhost',$uz='root',$pw='') {
$this->lang=$lang;
$mysqli=mysqli_connect($host,$uz,$pw,$db);
if ($mysqli) {
$this->connection=$mysqli;
unset($mysqli);
}
else die('Mysql failed ('.mysqli_errno($mysqli).'): '.mysqli_error($mysqli));
}
}
class sessions extends db {
var $connection;
function open() {return true;}
function close() {return true;}
function read($id){
$foo=$this->connection;
var_dump($foo);
#echo '_read var dump: ',var_dump(parent::query("SELECT * FROM sess")),'<hr>';
#$id=parent::connection->real_escape_string($id);
/*$result=mysqli_query($langCon,"SELECT `data` FROM `sess` WHERE `id`='{$id}' LIMIT 1");
if ($result && mysqli_num_rows($result)) {
echo '_read result found<hr>';
$record = mysql_fetch_assoc($result);
return $record['data'];
} */
return null;
}
}
$db=new db;
$sessions=new sessions;
请原谅我,如果这对大多数人来说似乎是常识,但我读过的每一个教程都只提到静态方法/变量继承,而不是我在这里遇到的事情。
答案 0 :(得分:1)
每次实例化对象时都会打开一个连接,例如
$db1 = new db;
$db2 = new db;
$db3 = new db;
将为您提供3个具有3个独立连接的数据库对象。如果您只想要一个SINGLE数据库连接,无论db对象被实例化多少次,那么您将需要考虑使用singleton。