0

私は以下を使用しています (これらを後日 mysqli に変更する予定があり、使用されるクエリの安全性が低いことを認識していると仮定します)、MySQL テーブルの 1 つの列の行からテキスト文字列を取得し、ブラウザーに出力します。理想的には、この列からランダムに選択された文字列になります。

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 Notice: Undefined offset: 0 in script.php on line 19」というエラーが表示されます (確かに、これは他のスレッドやチュートリアルからまとめられたものであるため、完全には従いません)。ログに記録されて観察された他のすべてのエラーを解決したので、可能であれば、出力が列からの単一行 (その中のテキスト) になるように修正するにはどうすればよいですか?

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

変数 $rs を定義することはありません。それ以外...

SQL クエリから最初の項目を選択する場合、制限と上限の両方を指定する必要はありません。

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

それは1行を返すので、mysql_fetch_rowを使用できます

$row = mysql_fetch_row($result);

そして、その行からフィールドを取得できます

echo $row["column_name"];
于 2013-03-04T01:18:45.067 に答える
1

SELECT-ステートメントでは、データベースに文字列をランダムに並べ替えるように指示しています。したがって、最初のものを取得してエコーします。

$row = mysql_fetch_array($rs)

echo $row['name_of_field_you_want_to_echo'];
于 2013-03-04T01:16:19.573 に答える