【问题标题】:PHP code to fetch random data from database with linkPHP代码通过链接从数据库中获取随机数据
【发布时间】:2013-07-12 17:19:45
【问题描述】:

我有一个大学的项目。我需要创建一个从数据库生成随机数据的站点。但它也需要生成一个链接。这样人们就可以复制该链接(由于网站正在生成不同的数据,人们可以通过复制 URL 来查看他们想要的数据)。

我正在考虑使用 RAND()。但是加入stackoverlow之后,我发现RAND()并不是一个好办法。

我可以使用 RAND() 获取随机数据,但它没有创建任何 URL。这也是另一个问题。我之前发布过这个问题。我认为我不应该使用 RAND() 函数。

这是我现在使用的代码:

<!--PHP code for fetching data from database-->
<?php
  $con = mysql_connect("localhost","root","");
  if (!$con){
  die('Could not connect: ' . mysql_error());
  }
  mysql_select_db("xlsx_db", $con);

  $result = mysql_query("SELECT * FROM sheet1 ORDER BY RAND() LIMIT 1");

  if (!$result) {
  echo 'Could not run query: ' . mysql_error();
  exit;
  }

  $row = mysql_fetch_array($result);
  echo "<b>Quote: </b>";
  echo $row['quote']."<br>";
  echo $row['by']."<br>";
?>

任何人都可以请建议我如何做到这一点?任何形式的帮助都将不胜感激。

【问题讨论】:

  • RAND() 非常适合小型数据库。 “不创建任何 URL”不清楚,可以从代码示例中受益。
  • 你使用的是自定义php还是一些php框架?
  • @ceejayoz - 我认为问题在于结果需要永久链接,因此查询需要是可重复的。如果数据库支持 RNG 的播种功能,那可能是一种选择。
  • @ceejayoz 更大的数据库会有什么问题?只为兴趣
  • @Sean 要做到ORDER BY RAND(),它必须为表中的每一行生成一个随机数。表越大,需要的时间就越多。如果它是一个十项表,它将几乎是即时的。

标签: php database random hyperlink fetch


【解决方案1】:

不确定这是否真的是您需要的,但是:

<?php
$rand = true;
if (isset($_GET['id'])) {
    if (is_int($_GET['id'])) {
        $id = (int) $_GET['id'];
        $q = 'SELECT * FROM table WHERE id = ?';
        $stmt = mysqli_prepare($dbc, $q);
        mysqli_stmt_bind_param($stmt, 'i', $id);
        mysqli_stmt_execute($stmt);
        if (mysqli_stmt_num_rows($stmt) == 1) {
            $rand = false;
            // display
        }
    }
}

if ($rand) {
    $q = 'SELECT * FROM table ORDER BY RAND() LIMIT 1';
    // run query
    $res = mysqli_fetch_array($r);
    $url = 'www.example.com/index.php?id=' . $res['id'];
}
?>

准备好的语句严格来说不是必需的,因为我们已经确保 $_GET['id'] 值是一个整数,但为了完整起见;D

如果您从多个表中选择数据,您可以使用另一个表来存储数据组合,然后使用组合 ID 作为id 参数生成 url。

【讨论】:

  • +1 但是,如果您提供使用 mysqli 连接到数据库的代码会更好,因为他的代码使用 mysql 并显示如何在代码中不存在 sql 注入孔...
  • @Bun 谢谢!将添加mysqli 函数。但是通过对 ID 进行类型转换,您已经可以防止注入攻击
  • @Bun 非常感谢您提供的代码。但是面临一个问题。 PHP 错误提示“无效的索引 ID”。你能告诉我如何解决它吗?我在 mysql 中的列 id 上设置了索引。但仍然显示同样的问题。
  • @Sean 非常正确,但为了 OP,我仍然会显示一些准备好的语句,以防他需要文本参数:D
  • @ProvashShoumma 啊...那是因为?id= 参数未设置,已设置,因此$_GET['id'] 也未在is_int($_GET['id']) 中设置...尝试编辑
【解决方案2】:

如果您想获得永久链接,则需要创建另一个页面。它将获取一个 ID(或识别您随机选择的数据记录的东西)并显示特定数据。您在随机页面上链接到此。

【讨论】:

    【解决方案3】:

    在您的数据库中随机查找一行。 获取行的 ID。 将 URL 与 id 连接起来。 URL 应该指向一个页面,该页面将提取具有从表中提供的 id 的行。

    【讨论】:

      【解决方案4】:

      前几天我发现了这个,并认为它非常全面:

      http://mysql.rjweb.org/doc.php/random

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-13
        • 2011-02-02
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-17
        • 1970-01-01
        相关资源
        最近更新 更多