You cannot directly store a MySQL result set. I believe this is because it's actually a reference and when it's converted to a string you will simply be storing "MySQL Result Set" instead of the result of your query.

My solution to this problem has been to turn my MySQL results into a PHP array where each row in the resultset is an item in the array. These items are arrays themselves with their keys being the column name. So if your result set returned names and phone numbers the array would be something like this:

$MyResultSetArray = array();
$MyResultSetArray[] = array('first_name' => 'Bob', 'last_name' => 'Johnson', 'phone' = '555-555-5555');

You then store the array in memcache. If you write a class you can do all this transparently. Something like:

MyClass->query(theSQL, addToCache)

and have it return the array mentioned above, regardless of whether it was pulled from the cache or generated on the fly.

This gives you the greatest flexibility with what you can do with your resultset. However, you will have to devise a method to ensure your data is not stale. My website, Gigoit, uses very consistent SQL queries that can easily be cached. When new items are posted to our site we run code to remove any keys that could be stale. If you describe your situation in more detail, I might be able to give you more information.

- John

http://www.Gigoit.org - Give and Get Free Items in your Area. (Saving the planet is just a bonus)


Ajinkya Nahar wrote:

Hi,

I am working on a PHP -- Mysql application.

I wanted to ask that can we cache the result set returned by a particular query into memcached?

If yes, can we fetch the same result set from memcached and use it without database connection?

E.g.

$query = "SELECT * from ......";

     $result = mysql_query($query);

     $memcache_obj->set($key, $result);

Will this work??

Please let me know your comments.

Regards,

Ajinkya


Reply via email to