wp_back/wp-content/plugins/query-monitor/classes/DB.php
2024-05-20 15:37:46 +03:00

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;
}
}