Hallo,
ich möchte die PDO und PDOStatement ein wenig erweitern, um die Anzahl der Queries und deren Laufzeit zu ermitteln. Mein Problem ist nun aber, dass ich bei der Verwendung von bindParam nach dem execute die Meldung
Invalid parameter number: no parameters were bound
bekomme. Hier mal meine Klassen
PHP-Code:
class DB extends PDO
{
public static $numberOfQueries = 0;
public static $queryTime = 0;
public function __construct(Configuration $config, array $driver_options = array('PDO_ATTR_PERSISTENT' => true))
{
try
{
switch($config->dbType)
{
case "mysql":
$dsn = 'mysql:host=' . $config->dbHost . ';dbname=' . $config->dbName;
break;
}
parent::__construct($dsn, $config->dbUser, $config->dbPass, $driver_options);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);
$this->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('DBStatement', array($this)));
}
CATCH(PDOException $e)
{
die();
}
}
public function query($statement)
{
$this->increaseQueryCounter();
$timeStart = microtime(true);
$res = parent::query($statement);
$this->queryTime = $this->queryTime + (microtime(true) - $timeStart);
return $res;
}
public function exec($statement)
{
$this->increaseQueryCounter();
$timeStart = microtime(true);
$res = parent::exec($statement);
$this->queryTime = $this->queryTime + (microtime(true) - $timeStart);
return $res;
}
public function increaseQueryCounter()
{
self::$numberOfQueries++;
}
public function getNumberOfQueries()
{
return self::$numberOfQueries;
}
public function getQueryTime()
{
return $this->queryTime;
}
}
PHP-Code:
class DBStatement extends PDOStatement
{
public $db;
protected function __construct(DB $db)
{
$this->db = $db;
}
public function execute(array $input_parameters = array())
{
$this->db->increaseQueryCounter();
$timeStart = microtime(true);
$res = parent::execute($input_parameters);
$this->db->queryTime = $this->db->queryTime + (microtime(true) - $timeStart);
return $res;
}
}
Folgendes geht einwandfrei
PHP-Code:
$dbh = new DB($config);
$sql = "SELECT * FROM user";
$sth = $dbh->prepare($sql);
$sth->execute();
$sql = "SELECT * FROM user WHERE uID = :uID";
$sth = $dbh->prepare($sql);
$sth->execute(array('uID' => 1));
aber hierbei gibt es den genannten Fehler
PHP-Code:
$sql = "SELECT * FROM user WHERE uID = :uID";
$sth = $dbh->prepare($sql);
$sth->bindParam('uID', $var, PDO::PARAM_INT);
$sth->execute();
kommentiere ich die execute Funktion in DBStatement aus, geht auch das einwandfrei. Kann mir jemand sagen, wie ich das zum Laufen kriege?
Viele Grüße
webbies