我正在使用以下内容(假设我已经计划在以后将这些更改为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注意:第19行的script.php中未定义的偏移量:0”引用此回声线(诚然,它是从其他线程和教程拼凑而成的,因此我没有完全遵循)但是,我已经解决了所有其他记录和观察到的错误,所以如果可能的话,我如何修改它以使输出只是列中的一行(其中的文本)?
答案 0 :(得分: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()
。 相信我!
答案 1 :(得分:1)
在您的SELECT
语句中,您告诉数据库随机排序字符串。所以,只需获得第一个并回应它:
$row = mysql_fetch_array($rs)
echo $row['name_of_field_you_want_to_echo'];
答案 2 :(得分:1)
您永远不会定义变量$ rs。除此之外...
如果要从SQL查询中选择第一项,则无需同时指定limit和top。
$result = mysql_query("SELECT * FROM `tablename` ORDER BY RAND() LIMIT 1");
由于那将返回一行,您可以使用mysql_fetch_row
$row = mysql_fetch_row($result);
然后您可以使用
从该行获取字段echo $row["column_name"];