转换为PDO

时间:2014-04-24 07:52:52

标签: php pdo

非常感谢您阅读我的帖子。

我对PHP很新。我一直在研究一个项目,现在使用mysqli,我正在尝试将其转换为使用PDO。在我目前的设置中,我有一个数据库类。但是我在使用PDO时已经阅读过,当使用PDO时,它是无意义的,或者至少没有必要在使用PDO时拥有数据库类。我想就此得到一些意见。我知道它是一个普遍的问题,但我想确保当我转换我的网站时,我正在以正确的方式进行。

非常感谢

好的,这是我第一个绊脚石的最基本的例子。请尽量不要笑得太厉害......看看这个

  try {

  $handler = new PDO('mysql:host=localhost;dbname=app', 'root', 'fidelio');
  $handler->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    } catch(PDOException $e){

    echo $e->getMessage();
    die();
 }

  $name = "pdotest";
  $message = "Test message";
  $sql = "INSERT INTO guestbook (name, message, posted) VALUES (?, ?, NOW())";
  $query = $handler->prepare($sql);
  $query->execute(array($name, $message));

这很有效。

但为什么这不起作用......

  class Database {


   private $handler;

    function Connect() {
    $db_host = "localhost";
    $db_name = "app";
    $db_user = "root";
    $db_pass = "fidelio";
    try {
        $this->handler = new PDO("mysql:host=" . $db_host . ";dbname=" . $db_name,  $db_user, $db_pass);
    } catch(PDOException $e) {
        die($e);
    }
}

}

database = new Database;
$name = "pdotest";
$message = "Test message";
$sql = "INSERT INTO guestbook (name, message, posted) VALUES (?, ?, NOW())";
$database->handler->prepare($sql);
database->execute(array($name, $message));

1 个答案:

答案 0 :(得分:1)

首先$ handler是私有的,你不能直接访问它们

其次你忘了使用$ database-> Connect();

class Database {
  .....
  public function getHandler() {
    return $this->handler;
  }
}

$database = new Database;
$database->Connect();
$name = "pdotest";
$message = "Test message";
$sql = "INSERT INTO guestbook (name, message, posted) VALUES (?, ?, NOW())";

$database->getHandler()->prepare($sql);
$database->getHandler()->execute(array($name, $message));

注意getHandler()函数。

As" @Your Common Sense"说,请注意Connect函数应该只调用一次 - 所以为此你可以在类构造函数中调用这个函数。

您可以在类构造函数__construct()

中调用Connect()函数
class Database {
  .....
   /**
    * Class constructor called when creating new object
    */
   public function __construct() {
       $this->Connect();
   }
}