下午好.我昨天开始使用PDO,我有一些问题.我正在创建extendet类,它不起作用,我找不到bug.
这是我的助手类的代码,对于工作女巫PDO:
class EPDO extends PDO { /** Some identificator of connection*/ public $db; /** * Creating new PDO connections */ public function __construct($dbhost, $dbname, $dbuser = 'root', $dbpass = '', $dbtype = 'mysql') { $db = new PDO($dbtype . ':host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); } /** * Insert into database with using transaction (if operation failed the changes go before) */ public function insert($statement) { $db->beginTransaction(); $status = $db->exec($statement); if ($status) { $db->commit(); } else { $db->rollback(); } } }
这是无法使用的代码:
$stm = $db->prepare('SELECT id FROM `startups` WHERE id = :id'); $params = array(':id' => $child->id); $ok = $stm->execute($params); $row = $stm->fetch(PDO::FETCH_ASSOC);
在此代码之前,我当然按以下方式调用连接:
require_once 'EPDO.php'; try { $db = new EPDO('--server--', '--database--', '--user--', '--pass--'); } catch (PDOException $err) { echo "Chyba spojeni: " . $err->getMessage(); }
非常感谢,对不起我的英语.
问题是你正在扩展PDO
类并重写构造函数,所有这些都不需要调用构造函数.
此外,每次创建新对象时,您实际上都在创建两个数据库连接.
这应该有助于解决您的问题,并减少创建的连接:
class EPDO extends PDO { /** Some identificator of connection*/ public $db; /** * Creating new PDO connections */ public function __construct($dbhost, $dbname, $dbuser = 'root', $dbpass = '', $dbtype = 'mysql') { parent::__construct($dbtype . ':host=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass); } /** * Insert into database with using transaction (if operation failed the changes go before) */ public function insert($statement) { $this->beginTransaction(); $status = $this->exec($statement); if ($status) { $this->commit(); } else { $this->rollback(); } } }