0

我编写了一个从 MySQL 查询中检索值的 PHP 脚本。我使用 mysql_fetch_array 将结果添加到数组中。我正在尝试从数组中选择一个随机值,但是 array_rand 似乎不起作用。我的代码如下:

<?php 
session_start();
ob_start();
require_once 'includes/db_connection.php';
require_once 'includes/contest.php';
require_once 'includes/survey.php';
require_once 'includes/poll.php';
require_once 'includes/clients.php';
require_once 'includes/user.php';
//Select All Entries from Contest and Save as Array
//Select 
mysql_connect(localhost,s2ktest_s2kuser, Bc33iyZYQWgUmguBehPI);
$dbname = 's2ktest_s2k';
mysql_select_db($dbname);
$contestid = 20;
$query = "SELECT UserID FROM Contest_Entered WHERE ContestID = $contestid";
//Save Result
$result = mysql_query($query) or die(mysql_error());
//Save All Contest Entries in Array
$entries = mysql_fetch_array($result) or die(mysql_error());

//Output all Rows
//While Each Entry in the Array is a Value
while($entries = mysql_fetch_array($result))
{
echo $entries;
echo "</br>";
}
echo array_rand($entries);
//mysql_free_result($result);
?>
4

3 回答 3

0

mysql_fetch_array()一次只检索一行。首先,使用 append 语法将整个结果集加载到一个数组中[],然后从中随机获取。

$all_entries = array();
// Using MYSQL_NUM to retrieve only numeric keys
// by default, mysql_fetch_array() gets both numeric and associative keys
while($entries = mysql_fetch_array($result, MYSQL_NUM))
{
  // Append all rows onto an array, only a sinlge value so you get a 1D array 
  $all_entries[] = $entries[0];
}
// Then call array_rand() against $all_entries
echo array_rand($all_entries);

免责声明:

开始考虑从旧mysql_*()函数迁移到支持预处理语句的现代 API。 PDO在 RDBMS 之间非常出色且可移植,而MySQLi也是一个不错的选择。

于 2012-06-12T17:22:08.250 回答
0

那是因为您在$entries开始循环时将值从数组更改为字符串。尝试array_rand($entries)在循环之前回显。

但是,如果您尝试从表中检索随机行(而不是从行中检索随机列,如您的代码所示)ORDER BY RAND(),请在查询中使用。目前还不清楚你要做什么。

祝你好运!

于 2012-06-12T17:22:14.710 回答
0

可能是因为你没有任何数组......当时只生成一行。

while($entries = mysql_fetch_array($result))
 {
  echo $entries;
  $arr[] = $entries;
  echo "</br>";
 }
 echo array_rand($arr);
于 2012-06-12T17:22:41.887 回答