65 lines
1.5 KiB
PHP
65 lines
1.5 KiB
PHP
<?php declare(strict_types = 1);
|
|
/**
|
|
* Database class used by the database dropin.
|
|
*
|
|
* @package query-monitor
|
|
*/
|
|
|
|
class QM_DB extends wpdb {
|
|
|
|
/**
|
|
* @var float
|
|
*/
|
|
public $time_start;
|
|
|
|
/**
|
|
* Performs a MySQL database query, using current database connection.
|
|
*
|
|
* @see wpdb::query()
|
|
*
|
|
* @param string $query Database query
|
|
* @return int|bool Boolean true for CREATE, ALTER, TRUNCATE and DROP queries. Number of rows
|
|
* affected/selected for all other queries. Boolean false on error.
|
|
*/
|
|
public function query( $query ) {
|
|
if ( $this->show_errors ) {
|
|
$this->hide_errors();
|
|
}
|
|
|
|
$result = parent::query( $query );
|
|
$i = $this->num_queries - 1;
|
|
|
|
if ( did_action( 'qm/cease' ) ) {
|
|
// It's not possible to prevent the parent class from logging queries because it reads
|
|
// the `SAVEQUERIES` constant and I don't want to override more methods than necessary.
|
|
$this->queries = array();
|
|
}
|
|
|
|
if ( ! isset( $this->queries[ $i ] ) ) {
|
|
return $result;
|
|
}
|
|
|
|
$this->queries[ $i ]['trace'] = new QM_Backtrace();
|
|
|
|
if ( ! isset( $this->queries[ $i ][3] ) ) {
|
|
$this->queries[ $i ][3] = $this->time_start;
|
|
}
|
|
|
|
if ( $this->last_error ) {
|
|
$code = 'qmdb';
|
|
|
|
// This needs to remain in place to account for a user still on PHP 5. Don't want to kill their site.
|
|
if ( $this->dbh instanceof mysqli ) {
|
|
$code = mysqli_errno( $this->dbh );
|
|
}
|
|
|
|
$this->queries[ $i ]['result'] = new WP_Error( $code, $this->last_error );
|
|
} else {
|
|
$this->queries[ $i ]['result'] = $result;
|
|
}
|
|
|
|
return $result;
|
|
}
|
|
|
|
}
|