HomePHP Page 5 - Working with MySQL and Sessions to Serialize Objects in PHP
The complete list of classes for the example - PHP
If you're interested in learning how to combine objects, sessions and MySQL, this is the article that you’ve been waiting for. It's the final part of the series “Serializing objects in PHP.” In three parts, this series goes through the fundamentals of serializing objects in PHP applications, and explores some advanced topics with regard to this subject, including the use of the magic “__sleep()” and “__wakeup()” functions, and the manipulation of serialized objects inside of MySQL tables.
Finally, for the sake of completeness, below I listed all the classes that I used for constructing the previous example:
// define 'User' class class User{ var $name; var $address; var $email; function User($userData=array()){ if(!is_array($userData)){ trigger_error('User data must be an array!',E_USER_ERROR); } foreach($userData as $property=>$value){ if($property==''||$value==''){ trigger_error('Invalid values for user data!',E_USER_ERROR); } $this->{$property}=$value; } } // obtain user name function getName(){ return $this->name; } // obtain user address function getAddress(){ return $this->address; } // obtain user email function getEmail(){ return $this->email; } } // define 'ObjectSerializer' class class ObjectSerializer{ function ObjectSerializer(){} function getSerializedObj($obj){ if(!is_object($obj)){ trigger_error($obj.'input parameter must be an object!',E_USER_ERROR); } return serialize($obj); } function getUnserializedObj($data){ if(!is_string($data)){ trigger_error($data. 'must be a string!',E_USER_ERROR); } return unserialize($data); } } // define 'MySQL' class class MySQL { var $conId; // connection identifier var $host; // MySQL host var $user; // MySQL username var $password; // MySQL password var $database; // MySQL database // constructor function MySQL($options=array()){ // validate incoming parameters if(count($options)>0){ foreach($options as $parameter=>$value){ if(empty($value)){ trigger_error('Invalid parameter '.$parameter,E_USER_ERROR); } $this->{$parameter}=$value; } // connect to MySQL $this->connectDB(); } else { trigger_error('No connection parameters were provided',E_USER_ERROR); } } // connect to MYSQL server and select database function connectDB(){ if(!$this->conId=mysql_connect($this->host,$this- >user,$this->password)){ trigger_error('Error connecting to the server',E_USER_ERROR); } if(!mysql_select_db($this->database,$this->conId)){ trigger_error('Error selecting database',E_USER_ERROR); } } // perform query function query($query){ if(!$this->result=mysql_query($query,$this->conId)){ trigger_error('Error performing query '.$query,E_USER_ERROR); } // return new Result object return new Result($this,$this->result); } } // define 'Result' class class Result { var $mysql; // instance of MySQL object var $result; // result set function Result(&$mysql,$result){ $this->mysql=&$mysql; $this->result=$result; } // fetch row function fetchRow(){ return mysql_fetch_array($this->result,MYSQL_ASSOC); } // count rows function countRows(){ if(!$rows=mysql_num_rows($this->result)){ return false; } return $rows; } // count affected rows function countAffectedRows(){ if(!$rows=mysql_affected_rows($this->mysql->conId)){ trigger_error('Error counting affected rows',E_USER_ERROR); } return $rows; } // get ID from last inserted row function getInsertID(){ if(!$id=mysql_insert_id($this->mysql->conId)){ trigger_error('Error getting ID',E_USER_ERROR); } return $id; } // seek row function seekRow($row=0){ if(!mysql_data_seek($this->result,$row)){ trigger_error('Error seeking data',E_USER_ERROR); } } function getQueryResource(){ return $this->result; } }
To wrap up
We’re done now. Over this series, I covered not only the fundamentals of object serialization in PHP, but also some advanced topics, such as the implementation of the magic “__sleep()” and “__wakeup()” functions, and the usage of objects in sessions. Finally, I completed the series by demonstrating how to store serialized objects in MySQL tables, which makes me believe that you have enough code to keep you experimenting for many hours. As usual, see you in the next PHP tutorial!