【问题标题】:Why is mt_rand() not working in this query? [duplicate]为什么 mt_rand() 在此查询中不起作用? [复制]
【发布时间】:2022-01-23 17:13:46
【问题描述】:

我正在尝试让我的网页从数据库中随机选择一篇帖子,但它一直返回错误。该错误将第三个查询称为布尔而不是对象,因此代码有问题。我只是不知道是什么。 P.S 我知道其余的代码可能很草率,只需要 mt_rand 函数的帮助。

<?php include('enter-message.php');
$query= $connect->prepare("SELECT MAX( id ) AS 'max_id' FROM userinfo")or die(mysqli_error($connect));;
$query->execute();
$query->bind_result($maximum);
while($query->fetch()){
//print_r($maximum);
}

$query= $connect->prepare("SELECT MIN( id ) AS 'max_id' FROM userinfo")or die(mysqli_error($connect));;
$query->execute();
$query->bind_result($minimum);
while($query->fetch()){
//print_r($minimum);
}

$request=$connect->prepare('SELECT * FROM userinfo ORDER BY mt_rand($minimum,$maximum) LIMIT 1');
if($request->execute()){
    while($request==$secret){
        echo("<div class='secrets-box'>");
        echo($secret['nickname']);
        echo($secret['secret']);
        echo("</div>");
    }

【问题讨论】:

  • mt_rand 是 PHP 函数,而不是 MySQL 函数。 stackoverflow.com/questions/32236915/… 可能对你有帮助
  • 在代码中使用die(mysqli_error($conn)); 是一个非常糟糕的主意,因为它可能会泄露敏感信息。更多解释见这篇文章:mysqli or die, does it have to die?
  • 请注意,(min, max) 范围内的随机数可能无法匹配未来某处的用户。当条目被删除时,会有间隙。

标签: php mysql


【解决方案1】:

你应该试试这个:

$request = $connect->prepare( 'SELECT * FROM userinfo ORDER BY ' . mt_rand($minimum,$maximum) . ' LIMIT 1' );

更好:

$rand = mt_rand($minimum,$maximum);
$request = $connect->prepare( 'SELECT * FROM userinfo ORDER BY %s LIMIT 1', $rand );

【讨论】:

    【解决方案2】:

    你可以使用mysql的rand()函数:

    'SELECT * FROM userinfo ORDER BY rand() LIMIT 1'
    

    将从用户信息中返回一个随机行

    【讨论】:

      猜你喜欢
      • 2012-03-26
      • 2012-08-25
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多