2013-03-04 47 views
0

我正在使用以下內容(假設我已經計劃在稍後的日期將這些內容更改爲mysqli,並且知道所用查詢的不安全性),從行中拉取文本字符串在一個MySQL表一列並在瀏覽器的輸出將理想情況下,從該列隨機選擇的字符串:使用PHP從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 $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通知:未定義偏移量:0在script.php中o第19行「中提到了這個回聲線(當然,它是從其他線程和教程拼湊在一起的,所以我沒有完全遵循),但是,我已經解決了記錄和觀察到的所有其他錯誤,所以如果可能的話,我怎樣才能修改這個,這樣輸出結果就是列中的一行(其中的文本)?

+0

你在做隨機,兩次在這裏? – Kermit 2013-03-04 01:09:53

+1

var_dump()是你的朋友 - 看看你想要訪問什麼。未定義的偏移量:0表示數組[0]中沒有任何內容。 – 2013-03-04 01:17:31

回答

3

更快,更好地獲得來自該行的場()

$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"]; 
} 

編輯它從mysqlmysqli(在飛行中)。如果你的桌子非常大,你不會希望使用RAND()相信我!

+0

我幾乎想要-1來使用'mysql_'函數。請解決這個問題。 – Kermit 2013-03-04 01:25:35

+0

我只是基於此:他說,***假設我已經計劃在以後將這些更改爲mysqli,並且知道所用查詢的不安全性),***。我會修改它在編輯 – 2013-03-04 01:27:03

+0

這是爲未來的訪客。 – Kermit 2013-03-04 01:31:59

1

在您的SELECT-聲明中,您告訴數據庫隨機排列字符串。因此,只需獲得第一個並回顯:

$row = mysql_fetch_array($rs) 

echo $row['name_of_field_you_want_to_echo']; 
1

您從不定義變量$ rs。除此之外...

如果從SQL查詢中選擇第一項,則不需要同時指定限制和頂級。

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

因爲這將不會返回一行,您可以使用和mysql_fetch_row

$row = mysql_fetch_row($result); 

,然後你可以用比使用RAND

echo $row["column_name"]; 
+0

但正如其他人所說,仍然不使用RAND()。 – 2013-03-04 01:23:46