Readme What is Simple MySQL DB Class? ------------------------------ Simple MySQL DB Class is a simple, yet powerful, class that will interact with a MySQL database. It provides: * A way to establish a connection * A way to execute queries * Keeps a count of executed queries * Can return the current ID of an auto_increment field * Table (un)locking * Error reporting * and more... What is Simple MySQL DB Class licensed under? --------------------------------------------- Simple MySQL DB Class is licensed uner the GNU GPL license. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. How do I implement Simple MySQL DB Class? ----------------------------------------- Various examples have been provided below Can I contact you? ------------------ Yes you may. If you have any questions, need help, or need to report a bug; don't hesitate to email me at esizemore05 at gmail dot com, or, admin at secondversion dot com. link = @mysql_connect($db_host, $db_user, $db_pass); if ($this->link) { if (@mysql_select_db($db_name, $this->link)) { $this->recent_link =& $this->link; return $this->link; } } // If we couldn't connect or select the db... $this->raise_error("Could not select and/or connect to database: $db_name"); } /** * Executes a sql query. If optional $only_first is set to true, it will * return the first row of the result as an array. * * @param string Query to run * @param bool Return only the first row, as an array? * @return mixed */ function query($sql, $only_first = false) { $this->recent_link =& $this->link; $this->sql =& $sql; $result = @mysql_query($sql, $this->link); $this->query_count++; if ($only_first) { $return = $this->fetch_array($result); $this->free_result($result); return $return; } return $result; } /** * Fetches a row from a query result and returns the values from that row as an array. * * @param string The query result we are dealing with. * @return array */ function fetch_array($result) { return @mysql_fetch_assoc($result); } /** * Returns the number of rows in a result set. * * @param string The query result we are dealing with. * @return integer */ function num_rows($result) { return @mysql_num_rows($result); } /** * Retuns the number of rows affected by the most recent query * * @return integer */ function affected_rows() { return @mysql_affected_rows($this->recent_link); } /** * Returns the number of queries executed. * * @param none * @return integer */ function num_queries() { return $this->query_count; } /** * Lock database tables * * @param array Array of table => lock type * @return void */ function lock($tables) { if (is_array($tables) AND count($tables)) { $sql = ''; foreach ($tables AS $name => $type) { $sql .= (!empty($sql) ? ', ' : '') . "$name $type"; } $this->query("LOCK TABLES $sql"); $this->is_locked = true; } } /** * Unlock tables */ function unlock() { if ($this->is_locked) { $this->query("UNLOCK TABLES"); } } /** * Returns the ID of the most recently inserted item in an auto_increment field * * @return integer */ function insert_id() { return @mysql_insert_id($this->link); } /** * Escapes a value to make it safe for using in queries. * * @param string Value to be escaped * @param bool Do we need to escape this string for a LIKE statement? * @return string */ function prepare($value, $do_like = false) { $value = stripslashes($value); if ($do_like) { $value = str_replace(array('%', '_'), array('\%', '\_'), $value); } if (function_exists('mysql_real_escape_string')) { return mysql_real_escape_string($value, $this->link); } else { return mysql_escape_string($value); } } /** * Frees memory associated with a query result. * * @param string The query result we are dealing with. * @return boolean */ function free_result($result) { return @mysql_free_result($result); } /** * Turns database error reporting on */ function show_errors() { $this->show_errors = true; } /** * Turns database error reporting off */ function hide_errors() { $this->show_errors = false; } /** * Closes our connection to MySQL. * * @param none * @return boolean */ function close() { $this->sql = ''; return @mysql_close($this->link); } /** * Returns the MySQL error message. * * @param none * @return string */ function error() { $this->error = (is_null($this->recent_link)) ? '' : mysql_error($this->recent_link); return $this->error; } /** * Returns the MySQL error number. * * @param none * @return string */ function errno() { $this->errno = (is_null($this->recent_link)) ? 0 : mysql_errno($this->recent_link); return $this->errno; } /** * Gets the url/path of where we are when a MySQL error occurs. * * @access private * @param none * @return string */ function _get_error_path() { if ($_SERVER['REQUEST_URI']) { $errorpath = $_SERVER['REQUEST_URI']; } else { if ($_SERVER['PATH_INFO']) { $errorpath = $_SERVER['PATH_INFO']; } else { $errorpath = $_SERVER['PHP_SELF']; } if ($_SERVER['QUERY_STRING']) { $errorpath .= '?' . $_SERVER['QUERY_STRING']; } } if (($pos = strpos($errorpath, '?')) !== false) { $errorpath = urldecode(substr($errorpath, 0, $pos)) . substr($errorpath, $pos); } else { $errorpath = urldecode($errorpath); } return $_SERVER['HTTP_HOST'] . $errorpath; } /** * If there is a database error, the script will be stopped and an error message displayed. * * @param string The error message. If empty, one will be built with $this->sql. * @return string */ function raise_error($error_message = '') { if ($this->recent_link) { $this->error = $this->error($this->recent_link); $this->errno = $this->errno($this->recent_link); } if ($error_message == '') { $this->sql = "Error in SQL query:\n\n" . rtrim($this->sql) . ';'; $error_message =& $this->sql; } else { $error_message = $error_message . ($this->sql != '' ? "\n\nSQL:" . rtrim($this->sql) . ';' : ''); } $message = ""; if (!$this->show_errors) { $message = ""; } die("There seems to have been a slight problem with our database, please try again later.

\n$message"); } } ?>
Example query(" SELECT * FROM users WHERE userid = 1 ") or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL $user = $db->fetch_array($user); // OR setting the second param to true, which will return the result set, effectively the same as above $user = $db->query(" SELECT * FROM users WHERE userid = 1 ", true) or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL /** * Example 2 - Getting the number of rows */ $users = $db->query(" SELECT * FROM users ") or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL echo $db->num_rows($users); /** * Example 3 - Getting the number of affected rows */ $users = $db->query(" UPDATE users SET is_active = 0 ") or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL echo $db->affected_rows($users); /** * Example 4 - Getting the number of executed queries */ echo $db->num_queries(); /** * Example 5 - (un)locking a table/tables * * array of tablename => locktype */ // Single table $tables = array( 'users' => 'write' ); $db->lock($tables); // Multiple tables $tables = array( 'users' => 'write', 'config' => 'read', 'posts' => 'write' ); $db->lock($tables); // Unlock $db->unlock(); /** * Example 6 - Getting the last insert id of an auto_increment field */ $db->query(" INSERT INTO users (name, email, is_active) VALUES ('Eric', 'esizemore05@gmail.com', 0) ") or $db->raise_error('Failed adding new user'); // Will use the message we give it + the SQL echo $db->insert_id(); /** * Example 7 - Freeing a mysql result */ $users = $db->query(" SELECT * FROM users ") or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL $db->free_result($users); /** * Example 8 - Turning error reporting on */ $db->show_errors(); /** * Example 9 - Turning error reporting off */ $db->hide_errors(); /** * Example 10 - Preparing a value for database queries * * Will use mysql_real_escape_string or mysql_escape_string * depending on your PHP version. */ $name = $db->prepare(trim(strip_tags($_POST['name']))); $email = $db->prepare(trim(strip_tags($_POST['email']))); $db->query(" INSERT INTO users (name, email, is_active) VALUES ('$name', '$email', 0) ") or $db->raise_error('Failed adding new user'); // Will use the message we give it + the SQL /** * Example 11 - Preparing a value for database queries + escaping for LIKE queries * * Will use mysql_real_escape_string or mysql_escape_string * depending on your PHP version. */ $email = $db->prepare(trim(strip_tags($_POST['email'])), true); $db->query(" SELECT * FROM users WHERE email LIKE '%$email%' ") or $db->raise_error(); // Leaving 'raise_error()' blank will create an error message with the SQL /** * Closing the database connection */ $db->close(); ?>