如何从 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)) ];
那应该从随机抓取的行中随机抽取一列。
我的问题在标题中清楚地说明了,无论如何,一个更详细的问题是如何使用 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)) ];
那应该从随机抓取的行中随机抽取一列。