所以我有一个我在Web应用程序中使用的函数列表。但是,大多数函数都会调用数据库类。以下是两个函数:
function add_post($userid,$body,$cat_id,$user_link){ //This function inserts new posts into the db
$db = new MysqliDb('localhost', 'root', 'root', 'my_db');
$now = date("Y-m-d H:i:s");
$insertData = array(
'user_id' => $userid,
'body' => $body,
'stamp' => $now,
'cat_id' => $cat_id,
'link' => $user_link
);
$db->insert('posts', $insertData);
}
function grab_username($userid){ //This function takes a user id, and returns the associated user_name
$db = new MysqliDb('localhost', 'root', 'root', 'my_db');
$params = array($userid);
$results = $db->rawQuery("SELECT username FROM users WHERE id = ?", $params);
//print_r($results);
foreach($results as $arrays){
foreach($arrays as $name){
return $name;
}
}
}
问题是我经常写这句话:
$db = new MysqliDb('localhost', 'root', 'root', 'my_db');
有没有办法可以全局声明变量,有更多类似的东西:
$db = new MysqliDb('localhost', 'root', 'root', 'my_db');
function add_post($userid,$body,$cat_id,$user_link){ //This function inserts new posts into the db
$now = date("Y-m-d H:i:s");
$insertData = array(
'user_id' => $userid,
'body' => $body,
'stamp' => $now,
'cat_id' => $cat_id,
'link' => $user_link
);
global $db->insert('posts', $insertData);
}
答案 0 :(得分:0)
有多种方法可以解决这个问题,但最佳实施方式可能因操作应用程序的结构和需求而异。
您提到了一个可行的全局变量,但通常被认为是不良结构:
someFunction(){
global $db;
$db->insert('posts', $insertData);
}
另一种方法虽然稍微清晰但组织得不好,但是将$db
连接传递给函数:
function myFunction( $db, ... ){
$db->query( // etc );
}
myFunction( $db );
更好的版本是在类中组织相关的函数,然后注入数据库:
class Posts {
public function listPosts( $db, ... ){
$db->query( // etc );
}
public function getPost( $db, ... ){
$db->query( // etc );
}
}
$posts = new Posts();
$posts->listPosts();
但是,你也可以决定制作这些static
方法,你可以将$db
传递给类构造函数并存储它,有很多选择。
您还可以创建自己的中央包装类,以返回连接。有一百万个实现,但很难在不了解您的应用程序结构,类如何共享资源,应用程序如何引导所有内容的情况下专门推荐一个实现 - 如果有的话。等
答案 1 :(得分:-1)
试试这个:
<强> db.php中强>
class DB
{
public $conn;
private static $instance;
private function __construct()
{
$server = 'localhost';
$user = 'root';
$pass = 'root';
$database = 'my_db';
$this->conn = mysqli_connect($server,$user,$pass,$database);
}
public function query($sql)
{
$result = mysqli_query($this->conn,$sql);
return $result;
}
public static function getInstance()
{
if (!isset(self::$instance))
{
$object = __CLASS__;
self::$instance = new $object;
}
return self::$instance;
}
}
现在,您可以在任何页面中执行以下操作:
require("db.php");
$dbh = DB::getInstance();
$sql = "your sql query ..";
$dbh->query($sql);