我知道PHP已经有一段时间了,但不知道foreach()命令是如何工作的。我知道它类似于 while()。我已经环顾了一下它是如何工作的,但不太确定如何将 mySQL 语句连接到它。
例如,假设您有一个 SQL 语句,如下所示:
"SELECT username,password,email,dob FROM users"
您将如何将其实现到 foreach() 语句中以回显每个用户的用户名、密码、电子邮件和出生日期?
提前感谢所有帮助!
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
}
你可以看看 php 手册:
http://de2.php.net/manual/en/mysqli-result.fetch-row.php
第一个示例应该是一个很好的起点
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 />"; }
输出: 喵喵 <</em>/>树皮
猫发出喵喵声
狗发出吠叫声
对于您的 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,我只是为了简单起见在这里使用它。
Foreach 循环遍历数组。您需要将该查询的结果放入一个数组中,这将需要使用 while 循环来循环它并将行保存到数组中或使用类似 *mysqli_fetch_all* 的东西
使用 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
这里的问题是你需要一些东西来迭代以用于每个 - 看起来你习惯于获取单个数组/对象。如果您使用的是数据库抽象层,而不是原始 mysql_* 命令,则这些工具中的大多数都会返回数组或对象数组。
你可以在这里看到一个你问的例子,但请注意,这是使用CodeIgniter的数据库层来获取数据:http://ellislab.com/codeigniter/user-guide/database/results.html