如何设置此功能?最后一个查询没有被执行..我在循环中搜索了很多查询(foreach,for,while),但没有。我正在尝试存储会话。
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;
}
编辑: store_sess表的结构:
id int (autoincrement)
xpath longtext
in datetime (tried also with varchar)
out varchar
答案 0 :(得分: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++;
}
上面的代码不是很容易扩展。相反,您应该完整地设置查询(您可以使用一个查询执行多个插入)并在设置查询字符串后执行它。
<强>更新强>
您的while
循环也是不必要的。
END UPDATE
$insertVals = "";
for($count = 0; $count < $alfa, $count++) {
$insertVals = ($insertVals == "" ? "" : ", ") .
"('" . $this->dbh->real_escape_string($arr_gc[$count][0]) . "', '" .
$this->dbh->real_escape_string($arr_gc[$count][1]) .
"', '0000-00-00 00:00:00')";
}
$query = "INSERT INTO `store_sess` (`xpath`, `in`, `out`) VALUES " . $insertVals;