如何从 mysql 数据库中随机获取变量? (使用 php 和 dbo 连接)

How do I randomly get variables from a mysql database? (using php with dbo connection)

我的问题在标题中清楚地说明了,无论如何,一个更详细的问题是如何使用 php 和 dbo 连接随机显示 mysql 数据库中的变量(例如名称)在 xampp 环境中。

这是我从头开始想出的:-

 <?php
                $db = new PDO 
                ('mysql:dbname=lab1;host=localhost;charset=utf8','root', 
                '');
                $stmt = $db->prepare('SELECT * FROM countries');
 ?>


                <head>
                <meta charset="UTF-8"/>
                <p>RANDOM!</p>
                </head>


                <body>
<?php
                $stmt -> execute();
                foreach($stmt as $row){
                $something = array ($row['name'] . $row['name']);
                }
                $rand_keys = array_rand($something, 1);
                echo $something[$rand_keys[0]] . "\n";
?>
                </body>

当我尝试打开它时似乎不起作用(从本地主机)

您可以按照其他人的建议使用 order by RAND()。但我认为你尝试的方式不起作用,因为你将元素添加到数组中的方式。像下面一行:

$something = array ($row['name'] . $row['name']);

不会将多个元素(例如国家名称)压入数组。它用重复两次的相同国家/地区名称的串联字符串替换先前的值。 (因此,如果国家名称是阿富汗,您的数组将始终包含一个元素 AfghanistanAfghanistan

像下面这样更改您的代码:

<?php
            $stmt -> execute();
            $something = [];
            foreach($stmt as $row){
                $something[] = $row['name'];
            }
            $rand_keys = array_rand($something, 1);
            echo $something[$rand_keys[0]] . "\n";
?>

希望这会奏效。

根据您的评论“抱歉,我没能说清楚我的问题,所以基本上我在 mysql 中有一个 table,有 4 列,截至现在它有 2 个输入行,现在我希望能够回显让我们说只有 1 个字段(随机),因为我从本地主机打开时刷新文件..." ...你需要做一个复合随机化:)

从这个 sql 更改开始,随机只抓取一行(所有列):

SELECT * FROM countries ORDER BY RAND() LIMIT 1

然后检索那一行,然后从可用列中随机选择:

$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_NUM);// PDO example, important to fetch by indexes, not associative names

echo $row[ rand(0,count($row)) ];

那应该从随机抓取的行中随机抽取一列。