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.
<?php
/***************************************************************************
*
* Author : Eric Sizemore ( www.secondversion.com & www.phpsociety.com )
* Package : Simple MySQL DB Class
* Version : 1.0.0
* Copyright: (C) 2007 Eric Sizemore
* Site : www.secondversion.com & www.phpsociety.com
* Email : esizemore05@gmail.com
* File : mysql.class.php
*
* 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.
*
***************************************************************************/
/**
* Class to interact with a mysql database
*/
class db_mysql
{
/**
* Connection to MySQL.
*
* @var string
*/
var $link;
/**
* Holds the most recent connection.
*
* @var string
*/
var $recent_link =
null;
/**
* Holds the contents of the most recent SQL query.
*
* @var string
*/
var $sql =
'';
/**
* Holds the number of queries executed.
*
* @var integer
*/
var $query_count =
0;
/**
* The text of the most recent database error message.
*
* @var string
*/
var $error =
'';
/**
* The error number of the most recent database error message.
*
* @var integer
*/
var $errno =
'';
/**
* Do we currently have a lock in place?
*
* @var boolean
*/
var $is_locked =
false;
/**
* Show errors? If set to true, the error message/sql is displayed.
*
* @var boolean
*/
var $show_errors =
false;
/**
* Constructor. Initializes a database connection and selects our database.
*
* @param string Database host
* @param string Database username
* @param string Database password
* @param string Database name
* @return boolean
*/
function db_mysql
($db_host,
$db_user,
$db_pass,
$db_name)
{
$this->
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 =
"<textarea rows=\"10\" cols=\"80\">MySQL Error:\n\n\n$error_message\n\nError: {$this->error}\nError #: {$this->errno}\nFilename: " .
$this->_get_error_path
() .
"\n</textarea>";
if (!
$this->
show_errors)
{
$message =
"<!--\n\n$message\n\n-->";
}
die("There seems to have been a slight problem with our database, please try again later.<br /><br />\n$message");
}
}
?>
<?php
/***************************************************************************
*
* Author : Eric Sizemore ( www.secondversion.com & www.phpsociety.com )
* Package : Simple MySQL DB Class
* Version : 1.0.0
* Copyright: (C) 2007 Eric Sizemore
* Site : www.secondversion.com & www.phpsociety.com
* Email : esizemore05@gmail.com
* File : example.php
*
* 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.
*
***************************************************************************/
/**
* Instantiate our mysql class and connect to the database.
*
* database host/server
* database username
* database password
* database name
*/
$db =&
new db_mysql
('localhost',
'username',
'password',
'database_name');
/**
* Example 1 - Simple query..
*/
$user =
$db->
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();
?>