Version: 1.02

Type: Class

Category: Databases

License: GNU General Public License

Description: Handling several databases at he same time easily



<?
 //==========================================================================================
 // By Umut Isik from Mavi Software Corporation
 // umut@mavibilgisayar.com
 //
 // I am waiting for your suggestions.The description of the object and functions are below the code
 //
 //
 // NOT : The usage of the insert() function is a bit different.Please read carefully.
 // and mail if needed.
 //
 //
 //==========================================================================================
 class database {
 	var $database;
	var $link;
	
	var $table_num;
	var $tables= array();
	function show() {
		$db=$this->database;
		$tables=$this->table_num;
		echo("Database: $db<br>There are  $tables tables :<br>");
		for($i=0;$i<$this->table_num;$i++) {
			$tr=$this->tables[$i];
			echo("$tr <br>");
		}
		
	}

	function construct($str,$link) {
		$this->link=$link;
		$db_list=mysql_list_dbs($this->link);
		$flag=0;
		while($row=mysql_fetch_object($db_list)) {
			if($row->Database==$str) $flag=1;
		}
		if($flag==0)  {
			echo("<p><b>Error in function construct().<br>");
			echo("No such database named $str.<b></p>");
			exit();
		}
		else
			$this->database=$str;
		$tables_query=mysql_list_tables($this->database);

		$i=0;
		while(list($table)=mysql_fetch_row($tables_query)) {
			$this->tables[$i]=$table;	
			$i++;
		}
		$this->table_num=$i;
		mysql_select_db($str,$this->link);
	}

	function insert($table,$field_names,$values) {
		mysql_select_db($this->database,$this->link);
        	$db_list=mysql_list_dbs($this->link);
		if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function insert().<br>");
			echo("There exist no table named $table in $this->database</b></p>");
                        exit();
                }
		$fields=explode(",",$field_names);
		$values=explode("~@",$values);
		//This part is the most important part.While making the $values by the valu
		//es you must use an identifier.Be carefull not to use an identifier that 
		//can be in a normal string.I offer using "~@"
		if(count($fields)!=count($values)) {
                        echo("<p><b>Error in function insert().<br>");
			echo("Invalid number of arguments</b></p>");
			exit();
		}
		$i=0;

		$res=mysql_query("select * from $table");
		$res_num=mysql_num_fields($res);
		
		while($i<$res_num) {
	                $table_field_names[$i]=mysql_field_name($res,$i);
                        $i++;
                }
 	
		$i=0;
		while($fields[$i]) {
                	if(!in_array($fields[$i],$table_field_names))  {
                        	echo("<p><b>Error in function insert().<br>");
                	        echo("Error in field names argument (second argument of the function)");
                                echo("There exist no field named $fields[$i] in table $table of $this->database<b></p>");
                                //echo $table_names[$i];
                                exit();
                        }
                $i++;
                }
		
		$query="INSERT INTO $table ";
		$i=0;
		while($fields[$i]) {
			if($i==0) {
				$field_string=$fields[$i];
				$values_string="'".$values[$i]."'";
			}
			else {
				$field_string=$field_string.",".$fields[$i]; 
				$values_string=$values_string.",'".$values[$i]."'";
			}
			$i++;
		}
		$query=$query."(".$field_string.")"." VALUES (".$values_string.")";
		mysql_query($query); 

	}
	
	function select($table,$field_names,$additional_rules) { //strings with no braces 
		mysql_select_db($this->database,$this->link);
		if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function select().<br>");
			echo("Error there exist no table named $table in $this->database</b></p>");
			exit();
		}
		if($field_names!="*") {
			$fields=explode(",",$field_names);
			
			$i=0;
			$res=mysql_query("select * from $table");
			$res_num=mysql_num_fields($res);
			while($i<$res_num) {
				$table_field_names[$i]=mysql_field_name($res,$i); 
				$i++;
			}

			$i=0;
			while($fields[$i]) {
				if(!in_array($fields[$i],$table_field_names))  {
                        		echo("<p><b>Error in function select().<br>");
					echo("Error in field names argument (second argument of the function)");
					echo("There exist no field named $fields[$i] in table $table of $this->database</b></p>");
					//echo $table_names[$i];
					exit();
				}
				$i++;	
			}
		}	
		
		if($additional_rules)
			$query="SELECT ".$field_names." FROM ".$table." WHERE ".$additional_rules;
		else
			$query="SELECT ".$field_names." FROM ".$table;
		$result=mysql_query($query);
		$i=0;
		while($row=mysql_fetch_array($result)) { 
			$array[$i]=$row;
			$i++;
		}
		return $array;
		
	}

	function update($table,$field_names,$values,$additional_rules) {
		mysql_select_db($this->database,$this->link);
		if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function update().<br>");
                        echo("Error there exist no table named $table in $this->database</b></p>");
                        exit();
                }
		$fields=explode(",",$field_names);
		$values=explode("~@",$values);
		//This part is the most important part.While making the $values by the valu
		//es you must use an identifier.Be carefull not to use an identifier that 
		//can be in a normal string.I offer using "~@"
		if(count($fields)!=count($values)) {
                        echo("<p><b>Error in function update().<br>");
			echo("Error invalid number of argiments</b></p>");
			exit();
		}

                $i=0;
                $res=mysql_query("select * from $table");
                $res_num=mysql_num_fields($res);
                while($i<$res_num) {
                       $table_field_names[$i]=mysql_field_name($res,$i);
                       $i++;
                }

                $i=0;
		$num=count($fields);
                while($fields[$i]) {
                        if(!in_array($fields[$i],$table_field_names))  {
                               echo("<p><b>Error in function update().<br>");
                               echo("Error in field names argument (second argument of the update function)");
                               echo("There exist no field named $fields[$i] in table $table of $this->database<b></p>");
                               //echo $table_names[$i];
                               exit();
                         }
			 if($i==0) $and="";
			 else $and=",";	
			 if(($values[$i][0]=="+") || ($values[$i][0]=="-") )
			 	$update_str=$update_str." $and ".$fields[$i]."=".$fields[$i].$values[$i];
			 else
			 	$update_str=$update_str." $and ".$fields[$i]."='".$values[$i]."'";	
                         $i++;
                 }

		$query="UPDATE ".$table." SET ".$update_str;
		if($additional_rules) $query=$query." WHERE ".$additional_rules;
		mysql_query($query);
	}	
	
	function remove ($table,$additional_rules) {
		mysql_select_db($this->database,$this->link);
		if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function remove().<br>");
                        echo("Error there exist no table named $table in $this->database</b></p>");
                        exit();
                }
		$query="DELETE FROM ".$table." WHERE ".$additional_rules;
		mysql_query($query);
	}
	
	function field_name($table,$index) {
		mysql_select_db($this->database,$this->link);
                if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function field_name().<br>");
                        echo("Error there exist no table named $table in $this->database</b></p>");
                        exit();
                }
		$fields=mysql_list_fields("$this->database","$table",$this->link);
		return mysql_field_name($fields,$i);

	}
	
	function field_num($table) {
		mysql_select_db($this->database,$this->link);
                if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function field_num().<br>");
                        echo("Error there exist no table named $table in $this->database</b></p>");
                        exit();
                }
                $fields=mysql_list_fields("$this->database","$table",$this->link);
                return mysql_num_fields($fields);

	}
	
	function field_names($table) {
		mysql_select_db($this->database,$this->link);
		if(!in_array($table,$this->tables)) {
                        echo("<p><b>Error in function field_names().<br>");
			echo("Error there exist no table named $table in $this->database<br></p>");
                        exit();
                }
		$fields=mysql_list_fields("$this->database","$table",$this->link);
		$columns=mysql_num_fields($fields);

		for ($i=0;$i<$columns;$i++) 
    			$fields_array[$i]=mysql_field_name($fields,$i);
		
		return $fields_array;
	}
	
	function insert_id() {
		return mysql_insert_id();
	}

 }
 //==========================================================================================
 // This library helps you to make several database connections and to handle database operations
 // at the same time.The functions are explained below.
 //
 // 1) show() takes no arguments and prints the information of the object(The name of the db and the names of tables
 // 2) construct() takes two arguments.The name of the database and MySQL link identifier of the connection.It constructs the
 // object.
 // 3) insert() takes three arguments.The name of the table , the field names and the field values.The field names and the 
 // field values must be string type.  
 // For example:
 // 		insert("table_name","field1,field2,field3","value1i~@value2~@value3") 
 //    !!!Separating the values with "~@" is important.You may use a different separator.
 //    !!!You have to modify insert function.The place is signed.
 //
 //
 // 4) select() takes three arguments.The name of the table , the field names and the rules for selecting.
 // This function returns an array pointer (The number os selected fields times the number of rows.
 // For example :
 // 		select("table_name","field1,field2,field3","field4='1' AND ....");
 //             select("table_name","*","field4='1' AND ....");
 // 5) update() takes four arguments.The name of the table , the field names , the field values and the rules for updating
 // For example :
 // 		update("tablename","field1,field2,field3","v1~@+v2~@-v3","field4='1'");
 //             v1 sets the field1 value to v1
 //             +v2 increments field2 by v2 
 //             -v3 decrements field3 by v3
 //    !!!Separating the values with "~@" is important.You may use a different separator.
 //    !!!You have to modify insert function.The place is signed.
 //
 // 6) remove() takes two arguments.The name of the table and the rules for deleting.For example            
 //             remove("table_name","field='1' AND ....");
 // 7) field_name() takes two arguments.The name of the table and the index of the field.It returns the name of the field 
 // with the index in the table.
 // 8) field_num() returns the number of field in the table.
 // 9) field_names() returns an array of the names of the fields of the table
 // 10) insert_id() returns the id of the last insertion operation.
 //
 //
 //
 //
 //============Example===========================================
 //<?
 //$link=mysql_connect("localhost","root","password");
 //
 //$db1=new database;               //creating a new object
 //$db1->construct("db1",$link);    //constructing the connections
 //
 //$db2=new database;		    //creating a new object
 //$db2->construct("db2",$link);    //constructing the connections
 //
 //$array=$db1->field_names("table1");
 //$i=0;
 //while($array[$i])
 // echo $array[$i]."<br>";
 //
 //echo $db2->field_name("table1",0);
 //$db1->insert("table1","field1,field2","v1,v2");
 //?>
 //==========================================================================================
 		
?>