Method '' not found in class PDO

Hello together,

i try to use an PDO Database Class for my Script.
I found an tutorial here: http://culttt.com/2012/10/01/roll-your-own-pdo-php-class/

This Class works fine - but PHPStorm set some 'Method not Found' warnings.

my class:

class PDODatabase
{
    private $host = HOST;
    private $user = USER;
    private $pass = PASS;
    private $dbname = DBNAME;

    /** @var $dbh PDO  */
    private $dbh;
    private $error;

    /** @var $stmt PDO */
    private $stmt;

    public function __construct()
    {
        // Set DSN
        $dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname;

        // Set options
        $options = array(
            PDO::ATTR_PERSISTENT => true,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        );

        try {
            $this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
            $this->dbh->exec("set names utf8");
        }
        catch (PDOException $e) {
            $this->error = $e->getMessage();
        }
    }

    public function query($query)
    {
        $this->stmt = $this->dbh->prepare($query);
    }

    public function bind($param, $value, $type = null)
    {
        if (is_null($type)) {
            switch (true) {
                case is_int($value):
                    $type = PDO::PARAM_INT;
                    break;
                case is_bool($value):
                    $type = PDO::PARAM_BOOL;
                    break;
                case is_null($value):
                    $type = PDO::PARAM_NULL;
                    break;
                default:
                    $type = PDO::PARAM_STR;
            }
        }
        $this->stmt->bindValue($param, $value, $type);
    }

    public function execute()
    {
        return $this->stmt->execute();
    }

    public function resultset()
    {
        $this->execute();
        return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
    }

    public function single()
    {
        $this->execute();
        return $this->stmt->fetch(PDO::FETCH_ASSOC);
    }

    public function rowCount()
    {
        return $this->stmt->rowCount();
    }

    public function lastInsertId()
    {
        return $this->dbh->lastInsertId();
    }

    public function beginTransaction()
    {
        return $this->dbh->beginTransaction();
    }

    public function endTransaction()
    {
        return $this->dbh->commit();
    }

    public function cancelTransaction()
    {
        return $this->dbh->rollBack();
    }

    public function debugDumpParams()
    {
        return $this->stmt->debugDumpParams();
    }

}


warnings on (for example):
return $this->stmt->fetch(PDO::FETCH_ASSOC);
return $this->stmt->rowCount();

what is wrong?

using PHPStorm 6.0.3

Best regards

2 comments

Hi there,

what is wrong?

You have provided wrong type hint for private $stmt.

It's not PDO (it has no fetch() or rowCount() methods -- as you can clearly see from documentation). Instead it should be PDOStatement.

0

Hi,

oh thank you ... that works :-)

0

Please sign in to leave a comment.