Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中通过类共享MySQL连接?_Php_Mysql - Fatal编程技术网

如何在PHP中通过类共享MySQL连接?

如何在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中的另一个类共享一个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 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中并在代码中使用即可。