我有一些类可以执行一些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
问题内容: 我有很多线程的应用程序。其中之一是烧瓶,用于实现(辅助)API。它使用时负载低,并且永远不会暴露在Internet上,因此内置flask Web服务器非常好。 我当前的代码如下所示: 我觉得我做错了,因为所有文档都说“在模块级别创建flask应用程序”。但是我不想这样做- 它与我的测试弄混了,并且API只是大型应用程序的一小部分,该应用程序具有自己的结构和协议(每个“应用程序”都是在一
Scala课堂是Twitter启动的一系列讲座,用来帮助有经验的工程师成为高效的Scala 程序员。Scala是一种相对较新的语言,但借鉴了许多熟悉的概念。 因此,课程中的讲座假设听众知道这些概念,并展示了如何在Scala中使用它们。我们发现这是一个让新工程师能够快速上手的有效方法。网站里的是伴随这些讲座的书面材料,这些文字材料本身也是很有用的。 方法 我们认为最有意义的教学方式是,不要把Scal
问题内容: 如果一个类实现了另一个类,那是什么意思?我找到了以下代码示例:http : //www.java2s.com/Code/Php/Class/extendsandimplement.htm 但不幸的是,它没有任何解释… 问题答案: 实现是指它采取接口指定的指定 行为 。考虑以下接口: 无论是和类实现的接口。 接口的优点在于,我们现在可以通过接口引用此类的实例。考虑以下示例: 该循环的输出
问题内容: 我正在使用登录功能,但是遇到了我无法弄清的错误。 这是我的模型登录类: 最后一个函数给出错误“ 在类中找不到方法’close’ ”,“ 在主题类中找不到引用的方法。 ” 这是我的数据库类: 路径是正确的,事实并非如此。可能是什么错误? 问题答案: PhpStorm无法确定您的字段是什么类型。您可以通过简单的PHPDoc注释提供typehint来提供帮助:
当一个类必须有某种对象的容器(集合)时,有几种选择,我想知道我更喜欢哪种实现。 以下是我找到的选项: 优点:AClass不依赖于集合的具体实现(在本例中为列表)。 缺点:AClass没有添加和删除元素的接口 优点:与IEnumerable相同,并且具有添加和删除元素的接口 缺点:ICollection接口定义了很少使用的其他方法,仅仅为了接口而实现这些方法是很无聊的。IEnumerable LIN
问题内容: 我自己的班级需要什么支持才能打印出来?例如,我有: 类应使用什么方法来使此代码起作用?也许是这样的: 我猜测该方法必须重载。我对吗?这够了吗? 问题答案: 您可以使用来打印任何对象。println的此重载版本将打印出您的对象的表示形式。如果要自定义要打印的内容,则必须重写该方法,例如: 如果不重写该方法,将使用class的默认实现,该实现具有以下形式(类名称和实例哈希码的十六进制表示形