gpt4 book ai didi

php - 在类里面使用 PDO

转载 作者:IT老高 更新时间:2023-10-28 23:44:51 26 4
gpt4 key购买 nike

我有几个类执行一些 MySQL 查询和准备好的语句。但是,我不知道如何将我的 PDO 对象合并到这些类中。例如,我想做这样的事情:

<?php

$dbh = new PDO(...);

class Foo extends PDO {
public $dbh;

public function bar() {
$this->dbh->prepare('SELECT * FROM table');
$this->dbh->execute();

}
}


?>

不幸的是,它不起作用。谁能建议一种优雅的方式来做到这一点?谢谢你的时间。对不起,我是新手,如果您有任何不清楚的地方,请留下任何评论,我会尽力回复!

最佳答案

您可以在实现单例模式的类中实例化与数据库的连接。连接将完成一次,您的所有其他对象/脚本都可以轻松访问此类。

我在下面的例子中使用了一个名为“Core”的类;

class Core
{
public $dbh; // handle of the db connexion
private static $instance;

private function __construct()
{
// building data source name from config
$dsn = 'pgsql:host=' . Config::read('db.host') .
';dbname=' . Config::read('db.basename') .
';port=' . Config::read('db.port') .
';connect_timeout=15';
// getting DB user from config
$user = Config::read('db.user');
// getting DB password from config
$password = Config::read('db.password');

$this->dbh = new PDO($dsn, $user, $password);
}

public static function getInstance()
{
if (!isset(self::$instance))
{
$object = __CLASS__;
self::$instance = new $object;
}
return self::$instance;
}

// others global functions
}

这个类从一个名为“Config”的静态类中获取参数,您可以在其中存储您的配置:

<?php
class Config
{
static $confArray;

public static function read($name)
{
return self::$confArray[$name];
}

public static function write($name, $value)
{
self::$confArray[$name] = $value;
}

}

// db
Config::write('db.host', '127.0.0.1');
Config::write('db.port', '5432');
Config::write('db.basename', 'mydb');
Config::write('db.user', 'myuser');
Config::write('db.password', 'mypassword');

在您的所有脚本/对象中,您只需获取 Core 的实例,然后查询数据库

$sql = "select login, email from users where id = :id";

try {
$core = Core::getInstance();
$stmt = $core->dbh->prepare($sql);
$stmt->bindParam(':id', $this->id, PDO::PARAM_INT);

if ($stmt->execute()) {
$o = $stmt->fetch(PDO::FETCH_OBJ);
// blablabla....

如果您需要更多关于单例的信息,请查看 PHP 文档 http://php.net/manual/en/language.oop5.patterns.php

关于php - 在类里面使用 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2047264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com