1

我知道 PHP 有一段时间了,但不知道 foreach() 命令是如何工作的。我知道它类似于 while()。我已经查看了它的工作原理,但不太确定如何将 mySQL 语句连接到它。

例如,假设您有一个 SQL 语句,如下所示:

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

您将如何将其实现到 foreach() 语句中以回显每个用户的用户名、密码、电子邮件和出生日期?

提前感谢所有帮助!

4

6 回答 6

3

foreach方法循环遍历数组(或对象)的所有行,从第一行到最后一行。这与while循环的不同之处在于,awhile一直循环直到满足特定条件。这可以在 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

Foreach 循环遍历一个数组。您需要将该查询的结果放入一个数组中,这将需要使用 while 循环对其进行循环并将行保存到一个数组中或使用 *mysqli_fetch_all* 之类的东西

于 2013-01-23T09:54:10.563 回答
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 回答