Php 带有PDO语句的数据库连接类

Php 带有PDO语句的数据库连接类,php,pdo,Php,Pdo,我刚刚开始学习OOP PHP,我正在尝试创建一个类来连接我的数据库 守则: class DB_CONNECT { private $host ; private $dbName ; private $userName ; private $password; private $db; public function __construct($host,$dbName,$userName,$password){ $th

我刚刚开始学习OOP PHP,我正在尝试创建一个类来连接我的数据库

守则:

  class DB_CONNECT
    {
    private $host ;
    private $dbName ;
    private $userName ;
    private $password;
    private $db;

    public function __construct($host,$dbName,$userName,$password){

        $this->host = $host;
        $this->dbName = $dbName;
        $this->userName = $userName;
        $this->password = $password;

        try {

             $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->dbName.';charset=utf8',$this->userName,$this->password);
             $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
             return $this->db;
        } catch (Exception $e) {

            ECHO $e->getMessage();
        }

    }   

}

 $db = new DB_CONNECT("localhost", "oopcms","viktor","viktor");


 function select($db){

    $query = $db->prepare("SELECT * FROM `test`");
    $query->execute();
    $row = $query->fetchAll(PDO::FETCH_ASSOC);
    return $row;
 }

 $x = select($db);
 var_dump($x);
但我得到了这个错误:

 Fatal error: Call to undefined method DB_CONNECT::prepare();

据我所知,无法创建PDO对象。你能提供一些指导吗?

学习OOP并不是创建无意义类的原因。
不幸的是,您创建了一个。PDO不需要在其上构建类。就这样吧

因此,与其

$db = new DB_CONNECT("localhost", "oopcms","viktor","viktor");
成功

$db = new PDO("localhost", "oopcms","viktor","viktor");
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

这将更加清晰和有用

这里感兴趣的人是这个问题的解决方案,Pekka你的常识谢谢你的提示:)


就我所知,这是
echo
,而不是
echo
。@FranciscoPresencia没关系,函数名(和语言构造)是大小写,说明您正在使用
$db->prepare
,但正确的代码应该是
$db->db->prepare
,问题是您试图在类中执行函数,不在PDO类中。@Viktorino最后一位不起作用,因为
private$db
,如果您将其更改为
public$db
,它会起作用。然而,我真的不明白这门课的意义。你想用它实现什么?我不知道为什么这被否决,因为这是真的-至少在OP的代码显示的阶段。实际上,我试图创建一些在PDO上构建的帮助器类,但最终发现它们都没有用。唯一可能的方向是实现类型提示占位符,就像nikic在他的PDO助手中所做的那样。但是我已经有了一个这样的功能。在类中硬编码查询不是一个好办法。嗯。。我如何在为插入更新删除和创建数据而创建的两个类中使用另一种db连接方式??对不起,我无法理解…在构造函数中传递PDO对象,然后分配给本地变量。创建cms的方向是创建一个类db connect,一个返回查询结果的抽象类和与数据库对话的子类,以及一个验证类。您不需要连接类,您不需要返回查询结果的抽象类,也不需要与数据库对话的子类。PDO已经可以做得更好了
 class Select
{
       private $query;
       private $dbh;
       private $row;

public function __construct(){

    $this->dbh =  new DB_CONNECT("localhost", "oopcms","viktor","viktor");



}


public function select(){

    $this->query = $this->dbh->db->prepare("SELECT * FROM `test`");
    $this->query->execute();
    $this->row = $this->query->fetchAll(PDO::FETCH_ASSOC);
    return $this->row;
  }


}

  $sel = new Select();
   $s = $sel->select();
  var_dump($s);