0

所以我有一个查询,我将所有项目返回到 mysql_fetch_array 中。现在,我知道我可以编写另一个查询,然后将我需要的项目选择到一个单独的查询中,但是,有没有办法从更大的查询中过滤出我想要依赖于 $_GET 的内容?

因此,在英语中,用户来自具有 ?id=1 的超链接,我执行了一段时间来获取所有值,但仅在列表中显示 $_GET['id'] 项目

<?php //give ma all values but only echo out list of the $_GET['id'] in the url
  while ($row = mysql_fetch_array($result) {
    $id = $rowvideo["id"];
    $title = $rowvideo["title"];
    $length = $rowvideo["length"];
}
echo("<li><a href='#'>". $title." " .$length. "</a></li>");
?>

希望这是有道理的。谢谢你们。

4

3 回答 3

1

如果您不希望第二个查询得到您所需要的,那么您的循环中的 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
于 2012-08-13T15:24:29.197 回答
0
<?php //give ma all values but only echo out list of the $_GET['id'] in the url
  while ($row = mysql_fetch_array($result)) {
    $id = $rowvideo["id"];
    $title = $rowvideo["title"];
    $length = $rowvideo["length"];
    if ($id == $_GET['id']) { // or even ===
      echo("<li><a href='#'>". $title." " .$length. "</a></li>");
    }
  }
?>
于 2012-08-13T15:24:07.313 回答
0

这里更清楚一点:

这将允许通过指定 id=xxx 在 url 中按 id 进行过滤,如果 xxx 是一个正整数。所以'bob'或-1的id不会过滤结果仍然给出所有结果

$filter=false;
if(isset($_GET['id']))
{
    $filter_id=intval($_GET['id']);
    if($id>0) $filter=true;
}

while($row = mysql_fetch_array($result))
{
    if( (!$filter) || ( ($filter) && ($filter_id==$row['id']) ) )
    {
        $id = $row["id"];
        $title = $row["title"];
        $length = $row["length"];

        // do other stuff here
    }
}

我还将 $rowvideo 更改为 $row,因为这是您用来获取结果的数组。

于 2012-08-13T15:38:17.047 回答