如何在PHP中通过类共享MySQL连接?
我想与PHP中的另一个类共享一个MySQL连接,该类负责执行查询。 因此,MySQL.php包含:如何在PHP中通过类共享MySQL连接?,php,mysql,Php,Mysql,我想与PHP中的另一个类共享一个MySQL连接,该类负责执行查询。 因此,MySQL.php包含: <?php $user = 'username'; $passowrd = 'password'; $conn = new PDO('mysql:host=ip;dbname=DBName;port=3306',$user,$passowrd); ?> <?php include 'DB.php'; class Manager { function
<?php
$user = 'username';
$passowrd = 'password';
$conn = new PDO('mysql:host=ip;dbname=DBName;port=3306',$user,$passowrd);
?>
<?php
include 'DB.php';
class Manager {
function jsonQuery() {
$response = array ();
$st = $conn->query ( "query");
$response ["results"] = array ();
foreach ( $st->fetchAll () as $row ) {
//my stuff with the query
}
$response ["success"] = 1;
echo json_encode ( $response );
}
}
$object = new Manager();
$object->jsonQuery();
?>
我称之为MyLibrary.php的php文件包含:
<?php
$user = 'username';
$passowrd = 'password';
$conn = new PDO('mysql:host=ip;dbname=DBName;port=3306',$user,$passowrd);
?>
<?php
include 'DB.php';
class Manager {
function jsonQuery() {
$response = array ();
$st = $conn->query ( "query");
$response ["results"] = array ();
foreach ( $st->fetchAll () as $row ) {
//my stuff with the query
}
$response ["success"] = 1;
echo json_encode ( $response );
}
}
$object = new Manager();
$object->jsonQuery();
?>
那我该怎么办呢 我认为最好的方法是使用函数,它总是全局的:-) 简单示例:
function &pdo() {
$user = 'username';
$passowrd = 'password';
static $db = null;
if($db===null)
$db = new PDO('mysql:host=ip;dbname=DBName;port=3306',$user,$passowrd);
return $db;
}
替代方案,但不好:
使用全局:
function foo() {
global $conn;
# your code ....
}
或
它总是存在的。它被调用,而且实现起来很简单。实例化参数时,直接将其传递到类中。这样,您就不会多次实现它,并在整个代码库中共享该实例
class Manager {
/** @var \PDO */
protected $pdo;
public function __construct(\PDO $pdo) {
$this->pdo = $pdo;
}
public function jsonQuery() {
$response = array ();
$st = $this->pdo->query("query");
$response ["results"] = array();
foreach ( $st->fetchAll() as $row ) {
//my stuff with the query
}
$response ["success"] = 1;
echo json_encode($response);
}
}
$object = new Manager($conn);
您不希望保持数据库连接打开,并在项目的不同模块之间共享它。相反,您可以在需要访问数据库的任何位置包含打开数据库的文件(即,
MySQL.php
),并在查询后将其关闭。您可以为connect创建一个具有变量(可能是控制器)的类,然后始终扩展该类。请记住在控制器中创建一个_构造,使变量与PDO连接。我相信您所追求的是一个名为的东西,但也可以使用静态类来完成。您不能在静态中使用$this->PDOfunctions@Frank不,你不能。但是这个问题不涉及静态,您仍然可以使用静态方法的注入?你能用$conn变量把类管理器的所有代码都放进去吗?@Ilovecoding我把你剩下的代码添加到了示例中,它可以工作了!使用此解决方案访问DB是一个很好的选择?全局变量通常是指将函数&pdo放在DB.php中吗?是的,只需将函数放在DB.php中并在代码中使用即可。