public function replace($key, $value, $expire = 0)
{
$value = $this->serialize($value);
$expire = $this->expire($expire);
$this->clearExpired();
$statement = $this->client->prepare("UPDATE {$this->table}\n SET v = :value, e = :expire\n WHERE k = :key");
$statement->execute(array(':key' => $key, ':value' => $value, ':expire' => $expire));
if ($statement->rowCount() === 1) {
return true;
}
// if the value we've just replaced was the same as the replacement, as
// well as the same expiration time, rowCount will have been 0, but the
// operation was still a success
$statement = $this->client->prepare("SELECT e\n FROM {$this->table}\n WHERE k = :key AND v = :value");
$statement->execute(array(':key' => $key, ':value' => $value));
return $statement->fetchColumn(0) === $expire;
}