我是PDO的新手,也是一般用PHP的OOP所以请好一点:)基本上我正在尝试基于PDO创建一个连接对象,以便我可以在我的网站中调用一个连接。
我需要一些准备好的语句,根据我使用我在下面尝试创建的相同db对象传递的ID,查找不同的结果。
如何制作和访问我在下面设置的db类,然后使用其中的函数来提取我需要的相关信息?任何例子都很棒,所以我可以了解最佳实践等。
非常感谢提前。
class db {
private static $connection;
private function __construct(){}
private function __clone(){}
private static function connect($db_server="localhost", $db_user="user", $db_pass="password") {
if(!$this->connection){
try{
$this->connection = new PDO($db_server, $db_user, $db_pass);
} catch (PDOException $e) {
$this->connection = null;
die($e->getMessage());
}
}
return $this->connection;
}
}
$dbh = new db::connect();
$stmt = $dbh->prepare("SELECT * FROM questions where id = ?");
if($stmt->execute(array($_REQUEST['testid']))) {
while ($row = $stmt->fetch()) {
print_r($row);
}
}
答案 0 :(得分:5)
您可以从不再使用 Singleton模式开始。它(以及一般的静态类)对过程编程中全局变量不好的所有相同原因都是不好的。
那就是说......你应该确保在整个地方使用相同的连接,而不是试图强制实施连接对象的唯一性。
以下是我的意思的一个例子:
class Foo
{
protected $connection = null;
public function __construct( PDO $connection )
{
$this->connection = $connection;
}
}
class Bar
{
// all the same as in Foo
}
$connection = new PDO('sqlite::memory');
$foo = new Foo( $connection );
$bar = new Bar( $connection );
此时,$foo
和$bar
个对象都可以访问相同的 PDO实例。如果您有一个需要访问数据库的对象,那么您只需在构造函数中为其提供连接。
您可能想要观看两个视频(幻灯片将包含Java代码,但您应该没有理解它):
答案 1 :(得分:0)
内置持久连接:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass, array(
PDO::ATTR_PERSISTENT => true
));