php - 没有错误 : PDO constructor was not called in

标签 php pdo

下午好。我昨天开始使用 PDO,对此我遇到了一些问题。我正在创建 extendet 类,它不起作用而且我找不到错误。

这是我的助手类的代码,用于工作女巫 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();
        }
    }
}

关于php - 没有错误 : PDO constructor was not called in,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20284396/

相关文章:

php - Laravel 依赖注入(inject) : When do you have to? 你什么时候可以模拟门面?两种方法的优点?

php - 为什么这个 PDO 语句会默默地失败?

PHP 7.0和MySQL启动报错 "undefined symbol: mysqlnd_allocator in Unknown"

PHP mysql PDO 拒绝设置 NULL 值

php - 我将如何在 Twig 中遍历这个关联数组?

php - MySQL SELECT 一张表中的多行,使用 WHERE 语句对不同表求和

javascript - 如何在 div 中回显 mysqli 结果,其中包含用于不同 javascript 函数的另一个 onclick for javascript 函数

php - SQL : Select all Posts from Followers

php - 划分 foreach 不能正常工作

php - Win32 PHP扩展开发