PHP Classes

File: sql.class.php

Recommend this page to a friend!
  Classes of Martin   Just another SQL Wrapper   sql.class.php   Download  
File: sql.class.php
Role: Class source
Content type: text/plain
Description: Main class
Class: Just another SQL Wrapper
MySQL database access wrapper
Author: By
Last change:
Date: 17 years ago
Size: 14,365 bytes
 

Contents

Class file image Download
<?php /** * Just another MySQL wrapper, but with some "faster/easier" methods to create the query. * * @package AARHOF * @author Martin Aarhof (martin at aarhof dot eu) * @link http://aarhof.eu/php/classes/jasw/ * @name JASW * @version 1.0 * * * LICENSE * - GNU General Public License * - If you like to use this class for personal or commercial purposes, * it's free as long as you have this notice in the file * - You may alter the source code. Any larger replacements or updates, please notice me :) * - The license is for all files included in this bundle. * http://www.gnu.org/licenses/gpl.html * * * TODO * - Error handler with builtin mailscripts and so on * - PostgreeSQL handler * - MSSQL handler * - Maybe Access handler * * KNOWN LIMITATIONS * - Joins, isnt possible yet with the b_ methods, but you can always fill the query in query method. */ /** * @desc Outputs all mysql codes needed for almost everything */ class SQL { /** * Database server name, defined outside the class! * * @var string * @access protected */ protected $db_server=DB_SERVER; /** * Database user name, defined outside the class! * * @var string * @access protected */ protected $db_user=DB_USER; /** * Database password name, defined outside the class! * * @var string * @access protected */ protected $db_passwd=DB_PASSWORD; /** * Database name, defined outside the class! * * @var string * @access protected */ protected $db_dbname=DB_DATABASE; /** * Table prefix, defined outside the class! * If all your table named fx. tbl_table1, tbl_table2 then insert tbl_ in the prefix, * then you only need to type table1, table2 in the b_**** * * @var string * @access protected */ protected $db_prefix=DB_PREFIX; /** * Use of database engine. * Only MYSQL works at this moment * * @var string * @access protected */ protected $db_type=DB_TYPE; /** * Database link * * @var string * @access protected */ private $db_link; /** * Holder for the query * * @var string * @access protected */ private $db_query; /** * Used if you want to se the query, if true your query will NOT be executed * * @var bool * @access public */ public $showQuery = false; /** * Counter for how many selects/updates etc. you make on a page * * @var integer * @static integer * @access public */ public static $counter; /** * Constructor, no parameters needed, if you dont want to define the database vars * then put them in here. * Connects to the database * * @access public * @param string $server * @param string $user * @param string $password * @param string $database * @param string $type */ public function __construct($server="",$user="",$password="",$database="",$type="MYSQL") { if($server) $this->db_server=$server; if($user) $this->db_user; if($password) $this->db_passwd; if($database) $this->db_dbname; switch (strtolower($type)) { case "mysql": $this->connect(); break; case "mssql": case "pgsql": default: die($type." not implemented yet"); break; } } /** * Connect to the database, and selects the database * * @access private */ private function connect() { if(!$this->db_link = @mysql_connect ($this->db_server,$this->db_user,$this->db_passwd)) $this->setError("mysql_connect(".$this->db_server.",".$this->db_user.",".$this->db_passwd.")"); if(!@mysql_select_db($this->db_dbname, $this->db_link)) $this->setError("mysql_select_db(".$this->db_dbname.",".$this->db_link.")"); } /** * Resets the static counter * * @access public */ public function resetCounter() { $this->counter=0; } /** * Return the static counter * * @access public * @return int */ public function getCounter() { return $this->counter; } /** * Close the database link * @return bool * @access public */ public function close() { return (mysql_close($this->db_link)); } /** * Executes the query * @param string * @access public */ public function query($query) { if($this->showQuery) $this->setError($query); $this->db_query = @mysql_query ($query, $this->db_link); if (!$this->db_query) $this->setError($query); $this->countAdd(); } /** * Fetches the query as array * * @access public * @return array */ public function fetch_array() { return mysql_fetch_array ($this->db_query, MYSQL_BOTH); } /** * Fetches the query as object * * @access public * @return object */ public function fetch_object() { return mysql_fetch_object($this->db_query); } /** * Fetches the query as row * * @access public * @return array */ public function fetch_row() { return mysql_fetch_row($this->db_query); } /** * Returns number of rows in the query * * @access public * @return integer */ public function num_rows() { return mysql_num_rows($this->db_query); } /** * Returns the number of affected rows in the query * * @access public * @return integer */ public function affected_rows() { return mysql_affected_rows(); } /** * Returns the last added auto increment id * * @access public * @return integer */ public function insert_id() { return mysql_insert_id($this->db_link); } /** * Free the result from the memory * * @access public * @return bool */ public function free_result() { return mysql_free_result($this->db_query); } /** * Buildes a "get more" fx. * SELECT foo, bar, baz FROM table WHERE id = 1 * // Returns array("foo"=>value,"bar"=>value,"baz"=>value) * * @access public * @param string * @param string * @param string/array * @param string/array * @param string * @return string */ public function b_getMore($select,$table,$where="",$order="",$limit="") { if(!is_array($select)) return $this->b_getone($select,$table,$where,$order,$limit); else { $this->b_select($select,$table,$where,$order,$limit); return $this->fetch_row(); } } /** * Buildes a "get one" fx. * SELECT name FROM table WHERE id = 1 * // Returns string * * @access public * @param string * @param string * @param string/array * @param string/array * @param string * @return string */ public function b_getone($select,$table,$where="",$order="",$limit="") { $q = array(); if(is_array($select)) die("b_getone does not accept an array - use b_select instead!"); $this->b_select($select,$table,$where,$order,$limit); if($this->num_rows()==0) return false; list($out) = $this->fetch_row(); return $out; } /** * Only returns the "realname" used in b_fetchobject * * @access private * @param string $name * @return string */ private static function getAsName($name) { return (stripos($name," as ") ? substr($name,stripos($name," as ")+4) : $name); } /** * Returns an array with like as * select = array("id","test AS t"); * // Returns array("id"=>value,"t"=>value); * * @access public * @param string/array $select * @param string/array $table * @param string/array $where * @param string $order * @param string $limit * @param bool $oneRow * @return array */ public function b_fetchobject($select,$table,$where="",$order="",$limit="",$oneRow=false) { if(!is_array($select)) $select=array($select); $out = array(); $this->b_select($select,$table,$where,$order,$limit); if($this->num_rows()==0) return ; while ($r = $this->fetch_array()) { $arr = array(); for($i=0;$i<count($select);$i++) { $arr[$this->getAsName($select[$i])]=$r[$this->getAsName($select[$i])]; } $out[] = $arr; } return ($oneRow ? $out[0] : $out); } /** * Buildes a select * * @access public * @param string/array $select * @param string/array $table * @param string/array $where * @param string/array $order * @param string $limit */ public function b_select($select,$table,$where="",$order="",$limit="") { $q = array(); $q[] = $this->_setSelect($select); $q[] = $this->setFrom($table); $q[] = $this->setWhere($where); $q[] = $this->setOrder($order); $q[] = $this->setLimit($limit); $this->query(implode(" ",$q)); } /** * Set the selects * * @access private * @param array/string $select * @return string */ private function _setSelect($select) { if(!is_array($select)) $select=array($select); return $this->_setStart("select").implode(",\n\t",$select); } /** * Buildes update query * UseQuote is used when the $update array should be passed through escapes * * @access public * @param array * @param string/array * @param string/array * @param string/array * @param string * @param boll */ public function b_update($update,$table,$where="",$order="",$limit="",$useQuote=true) { $set = array(); $q = array(); if(!is_array($update)) die("Update must be an array"); foreach ($update AS $field => $value) $set[] = $field." = ".($useQuote?$this->setQuote($value):$value); $q[] = $this->_setStart("update"); $q[] = $this->setFrom($table,false); $q[] = $this->_setSets($set); $q[] = $this->setWhere($where); $q[] = $this->setOrder($order); $q[] = $this->setLimit($limit); $this->query(implode(" ",$q)); } /** * Set the sets in insert query * * @access private * @param array $set * @return string */ private function _setSets($set) { return "SET\n\t".implode(",\n\t",$set); } /** * Buildes insert query * UseQuote is used when the $insert array should be passed through escapes * * @access public * @param array * @param string/array * @param boll */ public function b_insert($insert,$table,$useQuote=true) { $q = array(); $q[]=$this->_setStart("insert into"); $q[]=$this->setFrom($table,false); $q[]=$this->_setInsert($insert,$useQuote); $this->query(implode(" ",$q)); return $this->insert_id(); } /** * Set the insert array * * @access private * @param array $insert * @return string */ private function _setInsert($insert,$quote) { if(!is_array($insert)) die("Insert must be an array"); $fields = array(); $values = array(); foreach ($insert AS $field => $value) { $fields[] = $field; $values[] = ($quote?$this->setQuote($value):$value); } return "\n\t\t(".implode(",\n\t\t\t",$fields).")\n\tVALUES\n\t\t(".implode(",\n\t\t",$values).")"; } /** * Buildes delete query * * @access public * @param string/array * @param string/array * @param string/array * @param string/array */ public function b_delete($table,$where="",$order="",$limit="") { $q = array(); if(is_array($table)) $table=implode(",".$this->db_prefix,$table); $q[]=$this->_setStart("delete"); $q[]= $this->setFrom($table); $q[]= $this->setWhere($where); $q[]= $this->setOrder($order); $q[]= $this->setLimit($limit); $this->query(implode(" ",$q)); } /** * Returns count of rows * * @access public * @param string/array * @param string/array * @param string/array * @param string/array * @return integer */ public function b_count($table,$where="",$order="",$limit="") { return $this->b_getone("COUNT(*)",$table,$where,$order,$limit); } /** * Count the static counter up * * @access private */ private function countAdd() { SQL::$counter++; } /** * Creates the WHERE clausul to the b_*** * * @access private * @param array * @param array/string */ private function setWhere($where) { if($where) return "\nWHERE\n\t".(is_array($where)?implode("\n\tAND\n\t",$where):$where); } /** * Creates the ORDER clausul to the b_*** * * @access private * @param array * @param array/string */ private function setOrder($order) { if($order) return "\nORDER BY\n\t".(is_array($order)?implode(",",$order):$order); } /** * Creates the LIMIT clausul to the b_*** * * @access private * @param array * @param array/string */ private function setLimit($limit) { if($limit) return "\nLIMIT\n\t".$limit; } /** * Set quotes on insert and updates querys * * @access private * @param string * @return string */ private function setQuote($value) { switch ($value) { case "NOW()": return $value; break; default: if($value{0}=="'" && $value{strlen($value)-1}=="'") $value = substr(substr($value,0,-1),1); if (get_magic_quotes_gpc()) $value = stripslashes($value); if(version_compare(phpversion(),"4.3.0")=="-1") $value = "'".mysql_escape_string($value)."'"; else $value = "'".mysql_real_escape_string($value)."'"; return $value; break; } } /** * Set quotes on insert and updates querys * * @access private * @param array * @param array/string * @param bool * @return array */ private function setFrom($table,$withFrom=true) { if(is_array($table)) $table=implode(",\n\t".$this->db_prefix,$table); return ($withFrom?"\nFROM\n\t":"").$this->db_prefix.$table; } /** * Set start tag in query * * @access private * @param string $type * @return string */ private function _setStart($type) { return strtoupper($type)."\n\t"; } /** * Error handler * Not implemented yet! * * @access private * @param integer */ private function setError($query) { echo "<b>Query:</b><br /><textarea rows='30' cols='120'>".$query."</textarea>"; if(mysql_error()) echo "<br /><b>Error:</b><br />".mysql_error(); if(mysql_errno()) echo "<br /><b>Error #:</b><br /><a href='http://dev.mysql.com/doc/refman/4.1/en/error-messages-server.html' target='_blanl'>".mysql_errno()."</a>"; echo "<br /><b>Counter:</b><br />".$this->getCounter(); $data[] = "<b>Client:</b><br />".mysql_get_client_info(); $data[] = "<b>Link:</b><br />".mysql_get_host_info(); $data[] = "<b>MySQL:</b><br />".mysql_get_server_info(); $data[] = "<b>Protokol:</b><br />".mysql_get_proto_info(); if($data) echo "<br />".implode("<br />",$data); exit; } } ?>