postgresql PHP PDO 连接

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/6801202/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-20 23:09:24  来源:igfitidea点击:

PHP PDO Connection

phppostgresqlpdo

提问by Ahmad

I want create a connection class for database connection using PDO in PHP

我想在 PHP 中使用 PDO 为数据库连接创建一个连接类

here is my code :

这是我的代码:

<?php
class DatabaseConnection {

private $dbname     = "db_01";
private $host       = "localhost";
private $user       = "xxx";
private $password   = "xxxxxx";
private $port       = 5432;

private $DBH;

public function __construct() {
    try {
        $this->DBH  = new PDO("pgsql:host=$this->host;port=$this->port;dbname=$this->dbname;user=$this->user;password=$this->password");
    } catch(PDOException $e) {
        echo    $e->getMessage();  
    }

}
public function disconnect() {
    $this->DBH  = null; 
}
}
?>

For query in PDO i must use $DBH->query('SELECT * from user');

对于 PDO 中的查询,我必须使用 $DBH->query('SELECT * from user');

but how if i user my connection class in other class ?

但是如果我在其他类中使用我的连接类呢?

example

例子

<?php
include "DatabaseConnection.php";
class User {
    private $connection;

    public function getUser() {
        $this->connection = new DatabaseConnection();
        $STH = $this->connection->query('SELECT * from User');
    }
}
?>

But it's not work.

但它不起作用。

Any body can help me ? Thanks :)

任何机构都可以帮助我?谢谢 :)

UPDATE:

更新

After follow Jonah suggest,

在跟随约拿的建议之后,

<?php

class DatabaseConnection extends PDO {

private $dbname     = "db_01";
private $host       = "localhost";
private $user       = "xxx";
private $password   = "xxxxxxxxx";
private $port       = 5432;

public function __construct() {
    try {
        parent::__construct("pgsql:host=$this->host;port=$this->port;dbname=$this->dbname;user=$this->user;password=$this->password");
    } catch(PDOException $e) {
        echo    $e->getMessage();  
    }

}
public function disconnect() {
    $this = null;   
}
}
?>

i got message "The connection was reset" in browser, whats wrong ?

我在浏览器中收到消息“连接已重置”,怎么了?

回答by Jonah

That won't work. You either need to create a method that calls queryin PDO:

那行不通。您要么需要创建一个query在 PDO中调用的方法:

class DatabaseConnection {
    // ...
    public function query($sql) {
        return $this->DBH->query($sql);
    }
    // ...
}

or extend PDO.

或扩展 PDO。

class DatabaseConnection extends PDO {
    // ...
}

Update:On the other hand, there is very little point in wrapping the PDO class at all. Why not just create a PDO object directly?

更新:另一方面,包装 PDO 类根本没有什么意义。为什么不直接创建一个 PDO 对象呢?

回答by KingCrunch

class User {
  private $connection;

  public function __construct ($connection) {
    $this->connection = $connection;
  }

  public function getUser() {
    $STH = $this->connection->query('SELECT * from User');
  }
}