【问题标题】:Load row from MySQL depending on php?id=*根据 php?id=* 从 MySQL 加载行
【发布时间】:2011-06-05 05:24:50
【问题描述】:

我对 PHP 和 MySQL 还很陌生(熟悉其他语言)。基本上,我想从相对于 URL 中声明的 id 的行加载数据。例如,当"index.php?id=3"时加载第3行

这是我目前所做的:http://pastie.org/1436865

我很确定这个问题已经被问过一百万次了,但我不知道要搜索什么词,到目前为止还没有找到任何东西:S

谢谢大家

【问题讨论】:

  • +1 以获得带有代码链接的明确问题。我现在没有时间回答所有问题,但我会告诉你,你可以使用$id = (int) $_GET['id']; 从你的查询字符串中获取 id。祝你好运!
  • 绅士和学者你是先生 :) 做到了!

标签: php mysql row


【解决方案1】:

基于所有这些不太清楚但有效的示例,您可以制作一个函数

function getRow($query){
  $res = mysql_query($query);
  if (!$res) {
    trigger_error(mysql_error." in ".$query);
    return array();
  }
  $row = mysql_fetch_assoc($res));
  if ($row) return $row;
  return array();
}

然后将其存储到某个库文件中,然后将此文件包含到您的脚本中并仅用一行代码调用

$data = getRow("SELECT * FROM tablename WHERE id=".intval($_GET['id']));

还要注意奥斯瓦尔德的笔记,它非常重要。你不能也不应该依赖行的相对位置,因为根本没有位置。数据库表是一个堆,而不是有序列表。 使用特定的唯一字段值来处理特定的行。这就是要走的路

【讨论】:

    【解决方案2】:

    或者,如果您更喜欢数组而不是对象,请尝试以下操作:

    $query="SELECT * FROM table WHERE id=".(int)$_GET['id']." LIMIT 1";
    $result=mysql_query($query);
    
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
        echo $row['column'];
    }
    

    或者如果你喜欢索引列

    while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
        echo $row[0];
    }
    

    或两者(列名和索引):

    while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {
        echo $row[0].'-'.$row['column'];
    }
    

    如果你只需要一行,你甚至可以使用它:

    $result = mysql_query("SELECT * FROM table WHERE id=".(int)$_GET['id']);
    $row = mysql_fetch_row($result);
    echo $row[0];
    

    【讨论】:

      【解决方案3】:

      id=3... 部分称为查询字符串,您可以使用$_GET 数组访问它(请参阅PHP: Predefined Variables)。

      顺便说一句:从数据库表中加载第 3 行是没有意义的,因为数据库表中的行没有排序(因此不是行列表,而是一组记录是一个更合适的类比在这种情况下)。记录通常由所谓的主键标识,您必须确保自己的数据库表具有主键。

      【讨论】:

        【解决方案4】:

        最简单的方法是

        $id = (int) $_GET['id'];;
        $result = mysql_query("SELECT * FROM tablename WHERE id=".$id);
        while($res = mysql_fetch_object($result)){
            echo $res->columnname;
        }
        

        当然,你应该检查输入参数等。这是唯一的方法。

        【讨论】:

        • 您还可以阅读 php.net 上 mysql 函数的文档。例如,您可以在此处找到 mysql_fetch_object 页面 - php.net/manual/en/function.mysql-fetch-object.php
        • 或者另外你可以使用SELECT * FROM likes OFFSET " . $_GET['id'] LIMIT 1 ?由于他想要第三行,我们不知道他是否将 id 存储在他的表中。
        • 这里似乎没有必要
        • @poelinca 不,这既是错误的语法,也是绝对没有必要的
        • 是的,正如上面 Oswald 所写的,您应该在表中添加新列(例如,名为“id”)以用于排序记录。您应该在此列中添加“auto_increment”属性并将其作为主键以获得更好的性能。之后,当您在表中插入新行时,该行将获得自己的 id 值。
        猜你喜欢
        • 2015-07-27
        • 1970-01-01
        • 2011-12-21
        • 2016-01-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多