【发布时间】:2017-07-09 10:12:14
【问题描述】:
我是通过 Robin Nixon 的书学习 PHP 的,他的示例使用这样的函数来查询 MySQL 数据库
<?php
require 'config.php';
function queryMysql($query) {
global $connection; // accessible from config.php
$result = $connection->query($query);
if (!$result) die($connection->error);
return $result;
}
?>
config.php
<?php
$dbhost = 'localhost';
$dbname = 'database_name';
$dbuser = 'database_username';
$dbpass = 'database_password';
$connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if ($connection->connect_error) die($connection->connect_error);
// some other codes
?>
然后这通常会出现在您要查询数据库的代码中的任何位置$result=queryMysql($query); 这就是我一直在使用的东西,我最近了解到使用工厂类更好,并且应该可以减轻您的压力您的网站会增长,如果您以后碰巧使用多种类型的数据库。
我遇到了一个article,建议数据库应该以这种方式查询(稍作修改以适应我正在做的事情)
MYSQL 类
<?php
class MYSQL
{
private $host, $database_name, $username, $password;
public function setHost($host) {
$this->host = $host; // localhost
}
public function setDatabase($database_name) {
$this->database_name = $database_name; // database name
}
public function setUsermame($username) {
$this->username = $username; // db username
}
public function setPassword($password) {
$this->password = $password; // db password
}
public function connect () {
return $connection = new mysqli($this->host, $this->username, $this->password, $this->database_name);
if ($connection->connect_error)
// die($connection->connect_error);
false;
return $connection;
}
}
?>
工厂类
<?php
class ConnectionFactory
{
private $driver = null;
public function setDriver($driver) {
$this->driver = $driver;
}
public function connect($host, $username, $password, $database_name) {
switch($this->driver) {
case 'mysql':
$DB = new MYSQL();
break;
default:
$DB = new MYSQL();
}
$DB->setHost($host);
$DB->setDatabase($database_name);
$DB->setUsermame($username);
$DB->setPassword($password);
return $DB->connect();
}
}
?>
现在开始查询
<?php
$db_factory = new ConnectionFactory();
$db_factory->setDriver('mysql');
$connection = $db_factory->connect('localhost', 'database_username', 'database_password', 'database_name');
if ($connection->connect_error)
die($connection->connect_error);
$query = "SELECT * FROM users";
$result = $connection->query($query);
if (!$result)
die($connection->error);
// echo '<pre>' , print_r($result), '</pre>';
?>
我真的很想知道,上面的工厂类如何改进对数据库的调用。我读到如果您将来可能想连接到不同的数据库,它会有所帮助。如果是这样的话,如果我创建不同的函数并使用名称来指定它们调用的数据库,那会不会是一样的
function queryMysql() {
// code here
}
function queryPostgreSQL() {
// code here
}
对于上面的工厂类,我觉得(我知道错了)访问数据库压力更大,因为每次尝试访问数据库时都需要不断输入主机、用户名、密码和数据库名称。真正的优势是什么?谢谢
【问题讨论】: