From 8ac1d94a9dfe44223df9e77556e19729d2f28d9d Mon Sep 17 00:00:00 2001 From: colshrapnel Date: Fri, 1 Feb 2013 08:45:44 +0400 Subject: [PATCH] Inproved logging and comments spelling --- safemysql.class.php | 78 +++++++++++++++++++++++++++++++++------------ 1 file changed, 58 insertions(+), 20 deletions(-) diff --git a/safemysql.class.php b/safemysql.class.php index 5dc1cb1..1d6d5e2 100644 --- a/safemysql.class.php +++ b/safemysql.class.php @@ -332,9 +332,13 @@ class SafeMySQL } /** - * Function to parse placeholders either in the full query or in query part + * Function to parse placeholders either in the full query or a query part + * unlike native prepared statements, allows ANY query part to be parsed + * * useful for debug - * and conditional query building + * and EXTREMELY useful for conditional query building + * like adding various query parts using loops, conditions, etc. + * already parsed parts have to be added via ?p placeholder * * Examples: * $query = $db->parse("SELECT * FROM table WHERE foo=?s AND bar=?s", $foo, $bar); @@ -383,7 +387,8 @@ class SafeMySQL /** * function to filter out arrays, for the whitelisting purposes * useful to pass entire superglobal to the INSERT or UPDATE query - * OUGHT to be used for this purpose, as there could be fuelds whic user inallowed to alter. + * OUGHT to be used for this purpose, + * as there could be fields to which user should have no access to. * * Example: * $allowed = array('title','url','body','rating','term','type'); @@ -407,10 +412,38 @@ class SafeMySQL return $input; } + /** + * Function to get last executed query. + * + * @return string|NULL either last executed query or NULL if were none + */ + public function lastQuery() + { + $last = end($this->stats); + return $last['query']; + } + + /** + * Function to get all query statistics. + * + * @return array contains all executed queries with timings and errors + */ + public function getStats() + { + return $this->stats; + } + + /** + * private function which actually runs a query against Mysql server. + * also logs some stats like profiling info and error message + * + * @param string $query - a regular SQL query + * @return mysqli result resource or FALSE on error + */ private function rawQuery($query) { $start = microtime(TRUE); - $res = mysqli_query($this->conn, $query) or $this->error(mysqli_error($this->conn).". Full query: [$query]"); + $res = mysqli_query($this->conn, $query); $timer = microtime(TRUE) - $start; $this->stats[] = array( @@ -418,6 +451,18 @@ class SafeMySQL 'start' => $start, 'timer' => $timer, ); + if (!$res) + { + $error = mysqli_error($this->conn); + + end($this->stats); + $key = key($this->stats); + $this->stats[$key]['error'] = $error; + $this->cutStats(); + + $this->error("$error. Full query: [$query]"); + } + $this->cutStats(); return $res; } @@ -576,23 +621,16 @@ class SafeMySQL } /** - * Function to get last executed query. - * - * @return string|NULL either last executed query or NULL if were none + * On a long run we can eat up too much memory with mere statsistics + * Let's keep it at reasonable size, leaving only last 100 entries. */ - public function lastQuery() + private function cutStats() { - $last = end($this->stats); - return $last['query']; - } - - /** - * Function to get all query statistics. - * - * @return array contains all executed queries with timings - */ - public function getStats() - { - return $this->stats; + if ( count($this->stats) > 100 ) + { + reset($this->stats); + $first = key($this->stats); + unset($this->stats[$key]); + } } }