0

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

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

 <?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>

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

4

2 回答 2

0

您可以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";
?>

希望这会奏效。

于 2017-11-07T21:50:13.217 回答
0

根据您的评论“对不起,我无法明确我的问题,所以基本上我在 mysql 中有一个表,有 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)) ];

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

于 2017-11-07T22:00:21.547 回答