如果您不希望第二个查询得到您所需要的,那么您的循环中的 simple-if-statement
应该可以工作:
<?php
$getId = isset($_GET['id']) ? $_GET['id'] : false;
//give ma all values but only echo out list of the $_GET['id'] in the url
while ($row = mysql_fetch_array($result)) {
$id = $row["id"];
$title = $row["title"];
$length = $row["length"];
if ($id == $getId) {
echo("<li><a href='#'>". $title." " .$length. "</a></li>");
}
}
?>
请注意,我$getId
在循环之外声明以防止isset()
在每次迭代期间都必须使用。如果您不验证它是否已设置并尝试使用它,它将引发undefined index
警告 - 假设您已error_reporting
打开(启用该级别)。
array_filter()
或者,您可以在解析完所有数据后对数据使用 PHP :
$results = array();
while ($row = mysql_fetch_array($result)) $results[] = $row;
if (isset($_GET['id'])) {
$filtered = array_filter($results, function($element) use ($_GET['id']) { return ($element['id'] == $_GET['id']); });
$results = $filtered;
}
foreach ($results as $result) {
echo("<li><a href='#'>". $result['title']." " .$result['length']. "</a></li>");
}
我个人的意见是提高效率并编写第二个查询,当然假设您在指定 an 时实际上并不需要所有结果id
。这很简单:
if (isset($_GET['id']) && is_numeric($_GET['id'])) {
$query = 'SELECT id, title, length FROM table WHERE id=' . (int)$_GET['id'];
} else {
$query = 'SELECT id, title, length FROM table';
}
// your existing code as-is