非常感谢您阅读我的帖子。
我对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));
答案 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();
}
}