我在网页上有一个表单,用于根据用户输入的内容过滤数据库:
对数据库的Ajax调用会实时返回查询满足的属性计数:
$query = "
SELECT
*
FROM
first_page_data
WHERE
((((acos(sin((".$lat."*pi()/180)) * sin((`geo_lat1`*pi()/180))+cos((".$lat."*pi()/180)) * cos((`geo_lat1`*pi()/180)) * cos(((".$lon."- `geo_lon1`)* pi()/180))))*180/pi())*60*1.1515) * 1.609344) < ".$range."
AND
value_min >= " . $valmin . "
AND
value_max <= " . $valmax . "
AND
bed_min >= " . $bedmin . "
AND
bed_max <= " . $bedmax;
$result = mysql_query($query, $first_data);
$number = mysql_num_rows($result);
echo $number;
这很好用,一切正常。然而,我现在想要对结果做“某事”(例如,当点击按钮时将它们全部显示在表格中,在谷歌地图上显示它们等)。如何存储此查询的结果以便在其他网页上使用?我无法在另一个页面上重新查询数据库,因为结果取决于此表单上的用户输入。
答案 0 :(得分:1)
您可以将它们存储在临时会话中。我实际上不提倡这种方法,但不知道你的整个环境应该提供解决方案。
$result = mysql_query($query, $first_data);
while($row = mysql_fetch_assoc($result)) {
$_SESSION['store'][] = $row;
}
如果可以,我还强烈建议您迁移到使用mysqli,一旦完成此操作,您可以使用
将其删除unset($_SESSION['store']);
如果结果集很大,我不建议将其存储在临时会话中。将其作为json数组存储到文件中。
while($row = mysql_fetch_assoc($result)) {
$rows[] = $row;
}
file_put_contents($unique_var . '.txt', json_encode($rows));
您需要设置一个唯一值,以便稍后检索正确的文件。完成后使用以下方法擦除文件:
unlink($unique_var . '.txt');
那么未来的证明呢? SESSION存储更容易,但是结果集很大,而且很多用户可能非常渴望资源,所以试试这个:
$result = mysql_query($query, $first_data);
while($row = mysql_fetch_assoc($result)) {
$rows = $row;
}
if(count($rows) < 51) {
$_SESSION['store'] = $rows;
} else {
file_put_contents($unique_var . '.txt', $rows);
}
您可以稍后访问它:
if(!isset($_SESSION['store'])) {
$contents = file_get_contents($unique_var . 'txt');
unlink($unique_var . '.txt');
} else {
$contents = $_SESSION['store'];
unset($_SESSION['store']);
}
这样,您将始终尽快清除会话和临时文件。
答案 1 :(得分:1)
为什么不直接使用会话来存储用户的输入,然后重新查询数据库。无需将所有结果存储在会话中。