HEX
Server: Apache/2.4.37 (CentOS Stream) OpenSSL/1.1.1k
System: Linux ysnet.com.tw 4.18.0-553.5.1.el8.x86_64 #1 SMP Tue May 21 05:46:01 UTC 2024 x86_64
User: test (521)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /var/www/test/wp-content/plugins/search-regex/includes/sql/class-builder.php
<?php

namespace SearchRegex\Sql;

/**
 * Perform SQL queries on the database.
 */
class Builder {
	/**
	 * Get the wpdb error
	 *
	 * @param string $sql SQL statement.
	 * @return \WP_Error
	 */
	private function get_db_error( $sql ) {
		global $wpdb;

		$error = $wpdb->last_error !== '' ? $wpdb->last_error : 'Unknown error';

		return new \WP_Error( 'searchregex_database', $error, preg_replace( '/\{.*?\}/', '%', $sql ) );
	}

	/**
	 * Get total number of matching rows from a table using the filters
	 *
	 * @param Query $query Query.
	 * @return int|\WP_Error The number of rows, or \WP_Error on error
	 */
	public function get_count( Query $query ) {
		global $wpdb;

		$sql = $query->get_as_sql();

		$this->log_sql( 'SQL get_count', $sql );

		// This is a known and validated query
		// phpcs:ignore
		$result = $wpdb->get_var( $sql );
		if ( $result === null ) {
			return $this->get_db_error( $sql );
		}

		return intval( $result, 10 );
	}

	/**
	 * Get single row
	 *
	 * @param Query                  $query Query.
	 * @param Modifier\Modifier|null $modifier Modifier.
	 * @return object|\WP_Error
	 */
	public function get_result( Query $query, $modifier = null ) {
		global $wpdb;

		$sql = $query->get_as_sql( $modifier );

		$this->log_sql( 'SQL get_result', $sql );

		// Known query
		// phpcs:ignore
		$result = $wpdb->get_row( $sql );
		if ( $result === null ) {
			return $this->get_db_error( $sql );
		}

		return $result;
	}

	/**
	 * Get multiple rows
	 *
	 * @param Query $query Query.
	 * @return list<array<string, string>>|\WP_Error
	 */
	public function get_search( Query $query ) {
		global $wpdb;

		// phpcs:ignore
		$sql = $query->get_as_sql();
		$this->log_sql( 'SQL get_search', $sql );

		// This is a known and validated query
		// phpcs:ignore
		$results = $wpdb->get_results( $sql, ARRAY_A );
		if ( $results === false || $wpdb->last_error ) {
			return $this->get_db_error( $sql );
		}

		return $results;
	}

	/**
	 * Internal SQL debug function
	 *
	 * @param string $title Description for this SQL.
	 * @param string $query SQL.
	 * @return void
	 */
	private function log_sql( $title, $query ) {
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'SEARCHREGEX_TESTS' ) ) {
			// @phpstan-ignore disallowed.function
			error_log( $title . ': ' . preg_replace( '/\{.*?\}/', '%', $query ) ); // phpcs:ignore
		}
	}
}