/** * Execute EXPLAIN $query and return the result * @return MySQLi_Result the result handle */ private function explain_query() { $Query = new QueryRewrite($this->query); $explain = $Query->asExplain(); if (is_null($explain)) { return null; } return $this->mysqli->query($explain); }
public function testConstructor() { $sql = "SELECT id FROM ips WHERE ip='192.168.0.1' AND type=1 LIMIT 1"; $expectedType = QueryRewrite::SELECT; $expectedSelect = "SELECT id FROM ips WHERE ip='192.168.0.1' AND type=1 LIMIT 1"; $expectedExplain = "EXPLAIN {$expectedSelect}"; $expectedExtendedExplain = "EXPLAIN EXTENDED {$expectedSelect}"; $QRW = new QueryRewrite($sql); $this->assertEquals($expectedType, $QRW->getType()); $this->assertEquals($expectedSelect, $QRW->toSelect()); $this->assertEquals($expectedExplain, $QRW->asExplain()); $this->assertEquals($expectedExtendedExplain, $QRW->asExtendedExplain()); unset($QRW); }
if (isset($_REQUEST['primary']) && count($_REQUEST['primary']) > 0) { foreach ($_REQUEST['primary'] as $field => $value) { $where .= ' AND ' . Database::escapeField($field) . ' = ' . Database::find('review')->escape_string($value); } } $query = Database::find('review')->query_col('SELECT review.sample FROM ' . Database::escapeField($reviewhost['history_table']) . ' AS review WHERE review.checksum = ? ' . $where . ' ORDER BY review.ts_max DESC LIMIT 1', $_REQUEST['checksum']); } else { $query = Database::find('review')->query_col('SELECT review.sample FROM ' . Database::escapeField($reviewhost['review_table']) . ' AS review WHERE review.checksum = ?', $_REQUEST['checksum']); } $Query = new QueryRewrite(); $Query->setQuery($query); $sample = $Query->asExtendedExplain(); $return['QueryRewrite'] = (array) $Query; $return['oQuery'] = $query; $return['eQuery'] = $sample; $return['_REQUEST'] = $_REQUEST; if (is_null($sample)) { $return['Warnings'][] = array('Code' => '0', 'Level' => 'Error', 'Message' => "I can't explain this type of query yet"); } else { list($label, $database) = explode('`.`', $_REQUEST['explainDb']); $label = str_replace('`', '', $label); $database = str_replace('`', '', $database); $host = $explainhosts[$label]; Database::connect(null, $host['user'], $host['password'], null, null, 'pdo', array('dsn' => $host['dsn']), $label); Database::find($label)->query('USE ' . Database::escapeField($database));