how can i set this function to work? The last query doesn’t get executed.. i’ve searched a lot for queries in a loop (foreach, for, while) but nothing.. I’m trying to store sessions.
private function gc($expire)
{
$gcq = "SELECT `path`, `last`, LENGTH(`path`) FROM `sessions` WHERE LENGTH(`path`) > 0 AND DATE_ADD(`last`, INTERVAL ".(int) $expire." SECOND) < NOW();";
$gcq .= "DELETE FROM `sessions` WHERE DATE_ADD(`last`, INTERVAL ".(int) $expire." SECOND) < NOW()";
if($this->dbh->multi_query($gcq))
{
$arr_gc = null;
$count = 0;
do {
if($result = $this->dbh->store_result())
{
while($row = $result->fetch_assoc())
{
$arr_gc[$count] = array($row['path'], $row['last']);
$count++;
}
$result->free();
}
if($this->dbh->more_results())
{
$garbage = null;
}
}
while($this->dbh->next_result());
}
// no problems up here..
// problems from here to end....
$alfa = count($arr_gc);
if($alfa > 0)
{
$count = 0;
while($count < $alfa)
{
$this->dbh->query("INSERT INTO `store_sess` SET `xpath` = '".$this->dbh->real_escape_string($arr_gc[$count][0])."', in = '".$this->dbh->real_escape_string($arr_gc[$count][1])."', out = '0000-00-00 00:00:00'");
$count++;
}
}
return $this->dbh->affected_rows;
}
EDIT:
store_sess table’s structure:
id int (autoincrement)
xpath longtext
in datetime (tried also with varchar)
out varchar
The above code is not very scalable. Instead you should set up your query in its entirety (you can do multiple inserts with one query) and execute it after the query string has been set up.
UPDATE
Your
whileloop is unnecessary also.END UPDATE