1

私はしばらく PHP のことを知っていましたが、 foreach() コマンドがどのように機能するかは知りませんでした。while() に似ていることは知っています。私はそれがどのように機能するかを見てきましたが、どのように mySQL ステートメントをそれに接続するかについてはよくわかりません.

たとえば、次のような SQL ステートメントがあるとします。

"SELECT username,password,email,dob FROM users"

これを foreach() ステートメントにどのように実装して、すべてのユーザーのユーザー名、パスワード、電子メール、生年月日をエコーし​​ますか?

事前にすべての助けをありがとう!

4

6 に答える 6

3

このforeachメソッドは、配列 (またはオブジェクト) のすべての行を最初から最後までループします。これは、特定の条件が満たされるまでループし続けるwhileという点でループとは異なります。whileこれは、設定した条件に応じて、2 回の反復または 1000 回の反復の後になります。

ループではforeach、配列内のキーと同じ数の反復があることがわかっています (breakその中でステートメントを使用しない限り、すぐに中止されます)。

SQL の結果は、ループできる配列またはオブジェクトとして返すこともできます。例えば:

$query = "SELECT username,password,email,dob FROM users";
$resultSet = mysqli_fetch_all($query, MYSQLI_BOTH);
foreach ($resultSet as $id => $row) {
    echo $row['username'] // Show username
}
于 2013-01-23T09:56:29.527 に答える
1

PHP マニュアルを参照できます:
http://de2.php.net/manual/en/mysqli-result.fetch-row.php

最初の例は良い出発点になるはずです

于 2013-01-23T09:54:36.443 に答える
1

foreach は、配列を反復処理するためのメカニズムです。SQLクエリを実行するために使用しているものがデータの配列を返す場合(ほぼ間違いなくそうです)、foreachループを使用してすべての結果を実行できます。

$my_array = array('cats' => 'meow', 'dogs' => 'bark');
foreach($my_array as $value) { echo "{$vlaue} <br />"; }
echo "<br />";
foreach($my_array as $key => $value) { echo "{$key} make a {$value} sound<br />"; }

出力:
鳴き声 猫は
鳴き声を出す 犬は鳴き声を出す


SQLクエリの場合

$mysqli = new mysqli("example.com", "user", "password", "database");

$users = mysqli_fetch_array( $mysqli->query("SELECT username,password,email,dob FROM users") , MYSQLI_BOTH);

foreach($users as $user) {
   echo "User: {$user['username']} <br /> 
         Password: {$user['password]} <br /> 
         email: {$user['email']} <br />
         DOB: {$user['dob']} <br /><br />";
}

ただし、mysqli は使用しないでください。単純にするためにここで使用しました。

于 2013-01-23T10:08:04.143 に答える
0

MySQLの結果を使用する標準的な方法は、whileループです。ここで例2を見てください:

function readDataForwards($dbh) {
  $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
  try {
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
      $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
      print $data;
    }
    $stmt = null;
  }
  catch (PDOException $e) {
    print $e->getMessage();
  }
}

http://php.net/manual/en/pdostatement.fetch.php

foreachを使用して結果をループし、最初にすべてのデータをフェッチできます。

$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* Fetch all of the remaining rows in the result set */
print("Fetch all of the remaining rows in the result set:\n");
$result = $sth->fetchAll();
foreach($result as $key => $value)
{
    var_dump($value);
}

http://php.net/manual/en/pdostatement.fetchall.php

于 2013-01-23T09:58:07.153 に答える
0

ここでの問題は、foreachを使用するために反復処理するものが必要になることです。これは、単一の配列/オブジェクトを取得することに慣れているようです。生のmysql_*コマンドの代わりにデータベース抽象化レイヤーを使用した場合、これらのツールのほとんどは配列またはオブジェクトの配列を返します。

ここであなたが求めているものの正確な例を見ることができますが、これはCodeIgniterのデータベースレイヤーを使用してデータを取得していることに注意してください:http://ellislab.com/codeigniter/user-guide/database/results.html

于 2013-01-23T09:58:49.107 に答える
0

Foreach は配列をループします。そのクエリの結果を配列に入れる必要があります。これには、while ループを使用してその周りをループし、行を配列に保存するか、*mysqli_fetch_all* のようなものを使用する必要があります。

于 2013-01-23T09:54:10.563 に答える