将db对象传递给php类oop样式不起作用

时间:2017-09-20 15:13:40

标签: php database oop pdo

使用oop php的简单类,尝试将db对象(从db类)传递到另一个类(类别类),这样我就可以从db获取内容。

  

db class db.php

    class db {

    //put your code here
    private $hostname = "127.0.0.1";
    private $dbname = "php_oop_crud";
    private $username = "root";
    private $password = "";
    public $conn;
    public $status = 0;

    public function getConnection() {
        $this->conn = null;

        try {

            $this->conn = new PDO("mysql:host:$this->hostname;dbname=$this->dbname", $this->username, $this->password);
            // this return null if  unsccessfull
            $this->status = $this->conn->getAttribute(PDO::ATTR_CONNECTION_STATUS);

            if ($this->status) {
                echo "connected to db : " . $this->status;

                return $this->conn;
            }
        } catch (PDOException $ex) {
            echo "Can't connect to db " . $this->status;
            error_log("Ayman :: {{$ex->getMessage()}} - {{$ex->getFile()}} - {{$ex->getLine()}}");
            return $this->conn;
        }
    }

}
  

将db对象传递给index.php中的类别类

// Create db connection pass it to product and category objects
$databaseConn =  new db();
$db = $databaseConn->getConnection();


// create object  and send database object to class 
// now we need to call the function who crearte tha actual connection getConnection();

$category= new category($db);

$category->read();
  

类别类别.php

<?php

class category {

    //put your code here
    private $databaseConn;
    private $tabel_name = 'categories';

    public $id;
    public $name;

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


    public function read() {

        $sql = 'SELECT * FROM  categories';
        $query = $this->databaseConn->prepare($sql);
        $isok = $query->execute();
        $row= $query->rowCount(); 

        echo "row : " . $row;
         var_dump($row);

        echo "isok : " . $isok;
         var_dump($isok);


        if ($isok) {
            echo "the red process is done and ok <br/> category table";
        } else {
            echo "Cant get category ";
            var_dump($isok);
        }


    }

}
  

现在var_dump($row)var_dump($isok);始终为false,这意味着我可以成功连接到db   enter image description here

1 个答案:

答案 0 :(得分:-1)

@ishegg的信用,在构建PDO时要小心。

//这不起作用

$this->conn = new PDO("mysql:host:$this->hostname;dbname=$this->dbname", $this->username, $this->password);

//这将起作用

$this->conn = new PDO("mysql:host=".$this->hostname.";dbname=".$this->dbname, $this->username, $this->password);

enter image description here