创建数据库连接类(PDO)并获取数据

时间:2012-11-05 21:14:46

标签: php

我是OOP的新手,所以我想学习如何创建类并使用它们。目前我正在尝试从我的mysql表中获取数据。

要创建与mysql的连接我正在使用PDO。我已经为数据库连接创建了一个单独的类。我已将该类包含在show.php文件中。现在我想从mysql数据库中获取数据。问题是,当我运行我的show.php文件时,它显示此错误消息Fatal error: Call to undefined method DBConnection::prepare() in C:\xampp\htdocs\jm\show.php on line 10,但它应该只显示array

你能帮我找到解决这个问题的方法吗?

db.class.php

<?php
class DBConnection {

function DBConnection(){

    $host='localhost'; 
    $dbname='srijon';
    $user='root';
    $pass='';

    try {  
      $DBH = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);  
      $DBH->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  

        return $DBH;
    }
    catch(PDOException $e) {  

     echo 'ERROR: ' . $e->getMessage();
    }   

}//function ends

}// class ends
?>

show.php

<?php
 require_once 'db.class.php';

  function get_all(){

  $db=new DBConnection();

  $sql="SELECT * FROM information";
  $STH = $db->prepare($sql);
  $STH->execute();
  $STH->setFetchMode(PDO::FETCH_ASSOC);

  return $STH;

  }

  echo get_all();

 ?>

2 个答案:

答案 0 :(得分:11)

恕我直言,你可以将PDO连接注入需要它的函数:

<?php

$dbHandle = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
$dbHandle->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// always disable emulated prepared statement when using the MySQL driver
$dbHandle->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);

function get_all($dbHandle) {
    $sql = "SELECT * FROM information";
    $stmt = $dbHandle->prepare($sql);
    $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_ASSOC);

    return $stmt;
}

get_all($dbHandle);

如果你真的认为你需要一些类访问数据库(PDO除外)(你不需要),你必须扩展PDO:

<?php

class DBConnection extends PDO
{
    public function __construct()
    {
        parent::__construct("mysql:host=$host;dbname=$dbname", $user, $pass);
        $this->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        // always disable emulated prepared statement when using the MySQL driver
        $this->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    }
}

$dbHandle = new DBConnection();

function get_all($dbHandle) {
    $sql  = "SELECT * FROM information";
    $stmt = $dbHandle->prepare($sql);
    $stmt->execute();
    $stmt->setFetchMode(PDO::FETCH_ASSOC);

    return $stmt;
}

get_all($dbHandle);

答案 1 :(得分:1)

可能将DBConnections FUNCTION更改为__contstruct()函数。此外,您需要扩展PDO类以使用其中的所有方法。