无法得到数据库php,mysqli的结果

时间:2011-11-15 14:39:05

标签: php oop pdo

我试图理解oophp一点点但现在我陷入了从我的数据库中获取信息。我究竟做错了什么?提示关闭PDO后,我尝试了以下但也没有结果...

的index.php

<?php
include('classes/database.class.php');

$db = new Database();
$db->connect();
$res = $db->select();  
print_r($res); 
?>

database.class.php

<?php
    class Database  {

        private $db_host = 'localhost';     // Database Host
        private $db_user = 'root';          // Gebruikersnaam
        private $db_pass = 'root';          // Passwoord
        private $db_name = 'quickscans';    // Database naam

        public function connect()
        {
            try
            {
                $db = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name,$this->db_user,$this->db_pass);
            }
            catch(PDOException $e)
            {
                echo $e->getMessage();
            }
        }


        public function disconnect()    
        {
            $db = null;
        }  


        public function select()    
        {
            $sql = 'SELECT id FROM bedrijf';
            $results = $db->query($sql);

            foreach($results as $row)
            {
                echo $row['id'].'<br>';
            }
        }
    }  
?>

也许这段代码有点干净......但仍然没有结果:(。

1 个答案:

答案 0 :(得分:1)

您没有在此类中分配任何实例变量。

查询方法无法访问您创建的连接,因为该对象没有状态。

您的类的构造函数应该创建连接,然后可以在此属性上调用查询。

class Database  {

private $db_host = 'localhost';     // Database Host
private $db_user = 'root';          // Gebruikersnaam
private $db_pass = 'root';          // Passwoord
private $db_name = 'quickscans';    // Database naam

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

public function connect()
{
    try
    {
        $this->connection = new PDO('mysql:host='.$this->db_host.';dbname='.$this->db_name,$this->db_user,$this->db_pass);
    }
    catch(PDOException $e)
    {
        echo $e->getMessage();
    }
}


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


public function select()    
{
    $sql = 'SELECT id FROM bedrijf';
    $results = $this->connection->query($sql);

    foreach($results as $row)
    {
        echo $row['id'].'<br>';
    }
}
}  

$ this关键字为类设置实例变量,因此connection属性成为其他方法可以操作的PDO实例。如果没有这个,在方法中创建的变量(在本例中为$db)在本地函数范围内是孤立的,在较大的类中不可访问。

利用这种方法消除了在调用上下文中运行connect()的需要。如果您不想这样做,则不需要使用构造函数来执行此操作,您只需要首先连接以创建连接属性并将其提供给类的其余部分。另请注意,您可以随意命名该属性,我只使用connection因为它在API中最有意义。

另外,正如所评论的那样,为了使它更有用,你应该让select方法返回查询结果数组,而不是让它直接输出。

public function select()    
    {
        $sql = 'SELECT id FROM bedrijf';
        $results = $this->connection->query($sql);
        if(!empty($results)){
          return $results
        }else{
          return false;
        }
    }