0

我正在使用以下内容(假设我已经计划在以后将这些更改为 mysqli 并且知道所使用查询的不安全性),从 MySQL 表的一列中的行中提取文本字符串并在浏览器中输出理想情况下,将是从该列中随机选择的字符串:

mysql_connect($host,$username,$password); 
mysql_select_db($database) or die(mysql_error ()); 

$query="SELECT * FROM `tablename` ORDER BY RAND() LIMIT 0,1;";
$result=mysql_query($query);
$rows = array();
while($row = mysql_fetch_array($rs)) {
$rows[] = $row;
 }
mysql_close();
$max = count($rows) - 1;

使用下面的 echo 行来实现浏览器中的最后一位:

echo $rows[rand(0, $max)][0] . " " . $rows[rand(0, $max)][1] . " " . $rows[rand(0, $max)][2] . " " . $rows[rand(0, $max)][3] . " " . $rows[rand(0, $max)][4]$
?>

我收到错误“PHP Notice: Undefined offset: 0 in script.php on line 19”参考这个 echo 行(诚然,它是从其他线程和教程拼凑而成的,所以我不完全遵循),但是,我已经解决了所有其他记录和观察到的错误,所以如果可能的话,我该如何修改它,以便输出只是列中的一行(其中的文本)?

4

3 回答 3

3

比使用 RAND() 更快更好

$conn = mysqli_connect($host,$username,$password, $database);
if($conn->connect_errno > 0) {
  die('Unable to connect to database [' . $conn->connect_error . ']');
}

$total_rows = 20; //Generate Random number. You could get $total_rows with a first query counting all rows.
$selected_row = mt_rand(0, $total_rows);
//$selected_row -= 1; //just in case you randomized 1 - $total_rows and still need first row.

//Use the result in your limit.
$query="SELECT * FROM `tablename` LIMIT $selected_row, 1;";
$result=$conn->query($query);

while($row = $result->fetch_assoc()) {
  echo $row["columnname"];
}

将其从mysql到编辑mysqli(即时)。RAND()如果您的表非常大,您将不想使用。相信我!

于 2013-03-04T01:21:50.353 回答
1

在您的SELECT-statement 中,您告诉数据库随机排序字符串。因此,只需获取第一个并回显它:

$row = mysql_fetch_array($rs)

echo $row['name_of_field_you_want_to_echo'];
于 2013-03-04T01:16:19.573 回答
1

您永远不会定义变量 $rs。除此之外...

如果您从 SQL 查询中选择第一个项目,则不需要同时指定限制和顶部。

$result = mysql_query("SELECT * FROM `tablename` ORDER BY RAND() LIMIT 1");

由于这将返回一行,因此您可以使用 mysql_fetch_row

$row = mysql_fetch_row($result);

然后你可以从该行中获取字段

echo $row["column_name"];
于 2013-03-04T01:18:45.067 回答