我正在为mysql创建一个“DB”类。 DB类将与我项目中的其他类聚合。
的index.php
$db = new DB();
$fo = new Foo($db);
print_r($db->query("SELECT * FROM tbl"));
print_r($fo->testSelect());
Foo class
class Foo {
/**
* Constructor
* Aggregate class db object
*/
public function __construct( DB $db ) {
$this->db = $db;
}
public function test() {
return $this->db->query("select * from tbl");
}
}
我怀疑如何使用与数据库的连接来充分利用资源。 在DB类中,每当我运行查询(更新,选择,...)或在构造函数中打开连接一次时,最好打开连接?
DB Class(1)
if ( !class_exists( 'DB' ) ) {
class DB {
private function connect() {
$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
if ( $mysqli->connect_error ) {
die( "Connection failed: " . $mysqli->connect_errno . ' ' . $mysqli->connect_error );
} else {
$mysqli->set_charset(DB_CHARSET);
}
return $mysqli;
}
public function query( $query ) {
$db = $this->connect();
$result = $db->query( $query );
while ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {
$results[] = $row;
}
$result->free();
$db->close();
return $results;
}
..insert, update, delete function..
}
}
DB Class(2)
if ( !class_exists( 'DB' ) ) {
class DB {
private mysqli;
public function __construct() {
$this->mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT, DB_SOCKET);
if ( $this->mysqli->connect_error ) {
die( "Connection failed: " . $this->mysqli->connect_errno . ' ' . $this->mysqli->connect_error );
} else {
$this->mysqli->set_charset(DB_CHARSET);
}
return $this->mysqli;
}
public function query($query) {
$result = $this->mysqli->query( $query );
while ( $row = $result->fetch_array(MYSQLI_ASSOC) ) {
$results[] = $row;
}
$result->free();
return $results;
}
..insert, update, delete function..
public function __destruct() {
$this->mysqli->close();
}
}
}
哪个是正确/更好的解决方案? 谢谢
答案 0 :(得分:1)
通常,最好尽量减少对数据库的调用次数。为每个查询打开和关闭数据库连接都是浪费,如果有大量查询,将会降低应用程序的速度。
此外,每次关闭连接时都会丢失任何数据库会话状态。因此,如果您在一个查询中设置用户变量,然后尝试在另一个查询中使用它们,这将无效。或者,如果您设置会话变量,例如SET TIME_ZONE = ...
,您将失去这一点。 LAST_INSERT_ID()
和FOUND_ROWS()
等功能无效。