存储SQL结果以便在其他网页上使用

时间:2014-02-23 17:31:10

标签: php html mysql sql

我在网页上有一个表单,用于根据用户输入的内容过滤数据库:

enter image description here

对数据库的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;

这很好用,一切正常。然而,我现在想要对结果做“某事”(例如,当点击按钮时将它们全部显示在表格中,在谷歌地图上显示它们等)。如何存储此查询的结果以便在其他网页上使用?我无法在另一个页面上重新查询数据库,因为结果取决于此表单上的用户输入。

2 个答案:

答案 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)

为什么不直接使用会话来存储用户的输入,然后重新查询数据库。无需将所有结果存储在会话中。