我的问题清楚地在标题中说明了,无论如何更详细的问题是如何在xampp环境中使用带有dbo连接的php从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>
当我尝试打开它时(从localhost)
似乎不起作用答案 0 :(得分: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";
?>
希望这会奏效。
答案 1 :(得分:0)
根据您的评论&#34; 抱歉我无法清楚地表达我的问题,所以基本上我在mysql中有一个表,有4列,截至目前它有2行输入,现在我希望能够回应让我说只有1个字段(随机)当我从localhost打开文件时刷新文件... &#34; ......你需要做一个复合随机化:)
从这个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)) ];
那应该从随机抓取的行中随机拉出一列。