Php 在我自己的类中使用PDO连接
我无法使用我自己的Php 在我自己的类中使用PDO连接,php,pdo,Php,Pdo,我无法使用我自己的PDO_连接类中的PDO类方法,无论是否使用扩展PDO,它都无法正常工作 Class pdo_connection { //connection create private $dbhost = "127.0.0.1"; private $dbname = "db"; private $dbuser = "user"; private $dbpass = "pass"; public function __construct(
PDO_连接
类中的PDO类方法,无论是否使用扩展PDO
,它都无法正常工作
Class pdo_connection {
//connection create
private $dbhost = "127.0.0.1";
private $dbname = "db";
private $dbuser = "user";
private $dbpass = "pass";
public function __construct() {
return $db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
}
}
然后当我创建对象时:
require("api/pdo.connection.class.php");
$db = new pdo_connection();
$db->exec("SET NAMES utf8");
我不能使用exec,因为它不是pdo_连接类的方法,但我想使用在
pdo_连接
类中创建的pdo方法。如果你想像那样使用pdo_连接
,你必须扩展pdo
例如:
class db extends PDO {
然后,在该类中,在\uuu-construct
中,使用父::\uu-construct
:
parent::__construct('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
这是我使用该方法创建的类: 用法:
include_once 'db.php';
$db = new db('user');
// Do stuff with $db
任何构造函数的返回类型都应该是
void
。您可以使用构造函数初始化对象属性。调用new ClassName()
时的返回值将是ClassName
类型
也就是说,如果您想扩展classPDO
,可以这样做:
类pdo_连接扩展了pdo{…}
然而,就我个人而言,我不会这样做。事实上,快速搜索让我找到了这篇文章:
Class pdo_connection {
//connection create
private $dbhost = "127.0.0.1";
private $dbname = "db";
private $dbuser = "user";
private $dbpass = "pass";
public function __construct() {
try { // Don't forget this....
$this->db = new PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
} catch(PDOException $e) { }
}
public function exec() {
/// do your exec stuff here
}
}
类中并称之为OOP是不够的
op发布的类不扩展PDO,链接的文章包含一些,呃,可疑的语句和信息,但总体思路是可以的-请注意,您需要调用
$this->db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION)
要使PDO抛出异常,而不是在任何后续活动(在构造函数之后)中触发错误,强烈建议(如果不是必要的话)在使用MySQL时调用$this->db->setAttribute(PDO::ATTR\u EMULATE\u PREPARES,FALSE)
。链接的文章非常旧,一些背景:-当你从中得出结论时,请检查你的来源。
class MyPdo
{
protected $db;
protected $dbhost = '127.0.0.1';
protected $dbname = 'db';
protected $dbuser = 'user';
protected $dbpass = 'pass';
protected function __construct()
{
$this->db = PDO('mysql:host=' . $this->dbhost . ';dbname=' . $this->dbname, $this->dbuser, $this->dbpass);
}
public function __call($method, $args)
{
return call_user_func_array(array($this->db, $method), $args);
}
}