Array Rand no funciona con MySQL Fetch Array

Escribí un script PHP que recupera valores de una consulta MySQL. Usé mysql_fetch_array para agregar los resultados a una matriz. Estoy tratando de seleccionar un valor aleatorio de la matriz, sin embargo, array_rand no parece funcionar. Mi código está a continuación:

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

preguntado el 12 de junio de 12 a las 18:06

¿Qué quieres decir con que no funciona? ¿El código genera un mensaje de error? ¿Siempre produce el mismo valor? no imprime nada? -

Por favor, no utilices mysql_* funciones para el nuevo código. Ya no se mantienen y la comunidad ha comenzado la proceso de desaprobación. Consulte las caja roja? En su lugar, debería aprender sobre declaraciones preparadas y usa ya sea PDO or MySQLi. Si no puedes decidir este artículo ayudará a elegir. Si te importa aprender, aquí hay un buen tutorial de PDO. -

3 Respuestas

Tal vez porque no tiene ninguna matriz... El tiempo solo genera una fila a la vez.

while($entries = mysql_fetch_array($result))
 {
  echo $entries;
  $arr[] = $entries;
  echo "</br>";
 }
 echo array_rand($arr);

Respondido el 12 de junio de 12 a las 18:06

Eso devuelve un número aleatorio, pero quiero generar el ID de usuario contenido en la matriz. - alex bloque

Bueno, entonces solo haces esto $arr[$entries['UserID']] = $entries, si quiere decir que desea que la clave sea igual al ID de usuario? - max alan

mysql_fetch_array() recupera sólo una fila a la vez. Primero, cargue todo el conjunto de resultados en una matriz usando el [] agregue la sintaxis, luego obtenga aleatoriamente de eso.

$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);

Cláusula de exención de responsabilidades:

Empezar a pensar en migrar lejos de lo antiguo mysql_*() funciones a una API moderna que admite declaraciones preparadas. PDO es excelente y portátil entre RDBMS, mientras que MySQLi es una buena alternativa también.

Respondido el 12 de junio de 12 a las 18:06

Eso es porque estás cambiando el valor de $entries de una matriz a una cadena cuando inicia el bucle. Intenta hacer eco array_rand($entries) antes del bucle en su lugar.

Sin embargo, si en cambio está tratando de recuperar una fila aleatoria de una tabla (en lugar de una columna aleatoria de una fila, como parece hacer su código) use ORDER BY RAND() en tu consulta No está claro a qué vas.

¡Buena suerte!

Respondido el 12 de junio de 12 a las 18:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.