Right, but if every request done by a specific user is pulling in their user details, but the user details aren't changing, then you can cache that locally using something like memcached or apc. It's dynamic data coming in, but not all of that dynamic data will have changed since the last time you requested it from the database.
For example, if every request done by user A results in you doing the equivalent of "select * from user where username='user A'", but the user table isn't changing unless you explicitly do an update, then you should be caching the response in PHP such that you do something like this (not real code or caching mechanism, just illustrative):
Code:
if ( empty($userCache[$username]) )
{
$userCache[$username] = GetUserFromDB($username);
}
$userDetails = $userCache[$username];
You would then also update the local user cache any time you updated the user's details. Personally, I'm not an expert on this stuff: I normally work on projects small enough that the database is local to the same server, and I rely on the database and filesystem caches. But if your database server is, instead of being on the same server, running on some remote platform living in a different city, then this sort of caching is something you need to think about.
There are a variety of tools that let you store persistent data in memory that lasts between requests. APC is popular because it acts as a PHP accelerator on top of giving you this caching functionality.
EDIT: I should note that APC's memory caching is local: it's only a good idea if you have a single web server. If you have multiple web servers distributing the load, the memcached (which is a distributed cache) is required to keep data consistent between servers.