<?php
/**
* PHP 4 Database Class
* Performs basic MySQL database interactions
*/
class Database {
var $host = 'localhost';
var $user = 'username';
var $pass = 'password';
var $db = 'databasename';
var $conn; // Database connection
var $last_query; // Results of last query
var $last_sql; // String that contains last sql query
var $show_errors = true; // Whether or not to show error messages
/**
* Constructor function
* Connects and selects database
*
* @param string MySQL Host
* @param string MySQL Username
* @param string MySQL Password
* @param string MySQL Database name
* @return link Connection link
*/
function Database($host = '', $user = '', $pass = '', $db = '') {
$host = !empty($host) ? $host : $this->host;
$user = !empty($user) ? $user : $this->user;
$pass = !empty($pass) ? $pass : $this->pass;
$db = !empty($db) ? $db : $this->db;
$this->conn = mysql_connect($host, $user, $pass) or $this->error('Could not connect to database. Make sure settings are correct.');
if (is_resource($this->conn)) {
mysql_select_db($db, $this->conn) or $this->error("Database '$db' could not be found.");
return $this->conn;
}
return false;
}
/**
* Execute a query on the database
*
* @param string SQL query to execute
* @return query The query executed
*/
function query($sql) {
is_resource($this->conn) || $this->Database();
$this->last_sql = $sql;
return $this->last_query = mysql_query($sql, $this->conn) or $this->error();
}
/**
* Very simple select
*
* @param string Table name to select from
* @param string What to order by
* @param string Where statement
* @param string Columns to select
* @return result Result of query
*/
function select($table, $orderby = 'id DESC', $where = '', $cols = '*', $limit = '') {
$orderby = !empty($orderby) ? "ORDER BY $orderby" : '';
$where = !empty($where) ? "WHERE $where" : '';
$limit = !empty($limit) ? "LIMIT $limit" : '';
return $this->query("SELECT $cols FROM $table $where $orderby $limit");
}
/**
* Performs an insert query
*
* @param string Table name to query
* @param array Associative array of Column => Value to insert
* @return result Result of query
*/
function insert($table, $data) {
if (!is_array($data))
return false;
foreach ($data as $col => $value)
$data[$col] = $this->escape($value);
$cols = array_keys($data);
$vals = array_values($data);
$this->query("INSERT INTO $table (".implode(',', $cols).") VALUES (".implode(',', $vals).")");
return mysql_insert_id();
}
/**
* Updates a row
*
* @param string Table name to query
* @param array Associtive array of columns to update
* @param string Where clause
* @return result Result of query
*/
function update($table, $data, $where) {
if (!is_array($data))
return false;
foreach ($data as $col => $value) {
$vals[] = $col.' = '.$this->escape($value);
}
return $this->query("UPDATE $table SET ".implode(',', $vals)." WHERE $where");
}
/**
* Delete a single row
*
* @param string Table name to query
* @param string The column to match against
* @param string Value to match against column
* @return result Result of query
*/
function delete($table, $where) {
return $this->query("DELETE FROM $table WHERE $where");
}
/**
* Get results of query
*
* @param string Return as object or array
* @return result Result of query
*/
function get($type = 'object') {
$type = $type == 'object' ? 'mysql_fetch_object' : 'mysql_fetch_array';
if (is_resource($this->last_query)) {
while($rows = $type($this->last_query))
$results[] = $rows;
}
else $this->error();
return (!empty($results)) ? $results : null;
}
/**
* Get first result of query
*
* @param string Return as object or array
* @return result Result of query
*/
function get_first($type = 'object') {
$type = $type == 'object' ? 'mysql_fetch_object' : 'mysql_fetch_array';
if (is_resource($this->last_query))
return $type($this->last_query);
else $this->error();
}
/**
* Escape strings
*
* @param mixed String to escape
* @return string Escaped string, ready for SQL insertion
*/
function escape($data) {
switch(gettype($data)) {
case 'string':
$data = "'".mysql_real_escape_string($data)."'";
break;
case 'boolean':
$data = (int) $data;
break;
case 'double':
$data = sprintf('%F', $data);
break;
default:
$data = ($data === null) ? 'null' : $data;
}
return (string) $data;
}
/**
* Show simple error messages to help aid development process
*
* @param string Custom error message to show
* @return death Error page
*/
function error($msg = '') {
if ($this->show_errors === true) {
$error = '<h1>Error!</h1>';
if (!empty($msg))
$error .= "$msg<br />";
if (mysql_error())
$error .= '<b>MySQL Error:</b> '.mysql_error().'<br />';
if (isset($this->last_sql))
$error .= '<b>SQL Statement:</b> '.$this->last_sql;
die($error);
}
}
}
|