我总是在我的数据库中使用while循环生成所有记录,而我的一些朋友告诉我,最好使用foreach从数据库生成记录,但我不知道如何。
<?php
$query = mysql_query("select * from sampleTABLE");
while($i = mysql_fetch_array){
echo $i['samplefieldName'];
}
?>
我的问题是,如何使用foreach显示数据库中的记录?并且有人可以在while循环中用语法比较它并生成结果,谢谢。
答案 0 :(得分:2)
没有必要使用foreach而不是在这里,因为@Zerkms说
while($i = mysql_fetch_array( $query)){
然而,你可以通过下面的代码来做到这一点,但我确信它不是好方法
$result_list = array();
while($row = mysql_fetch_array($query)) {
result_list[] = $row;
}
foreach($result_list as $item) {
//you can now echo $item ; or whatever you want
}
ext/mysql
PHP扩展程序(提供名为mysql_的所有函数)为officially deprecated as of PHP v5.5.0,将来会被删除。因此,请使用PDO
或MySQLi
好读
答案 1 :(得分:2)
首先,不推荐使用mysql_xxx()
函数。不建议使用它们。建议使用PHP中的两种替代方法 - mysqli()
和PDO
。
较旧的mysql_xxx()
函数不允许您使用foreach
循环记录集。
但是,新的替代API 执行允许这样做,因为它们实现了Iterator
接口。
所以是的,可以使用foreach
循环PHP中的记录集,但不能使用旧的mysql_xxx()
函数。
您可以编写如下代码:
$conn = new mysqli(....);
foreach ( $conn->query('SELECT ....') as $row ) {
print_r($row);
}
或者像这样:
$db = new PDO('mysql:....', $user, $pass);
foreach ($db->query('SELECT ....') as $row) {
print_r($row);
}
话虽如此,请注意,自PHP v5.4起,只能使用mysqli
进行此操作,因此您需要及时了解PHP版本。另一方面,PDO
已支持此功能多年。
他们当然也可以使用while
循环,这是你的朋友不太正确的地方,因为while
和{之间没有任何区别{1}}在这里。从foreach
切换到while
不会对代码的性能产生任何影响。他们在引擎盖下做同样的事情。在这种情况下,foreach
实际上只是“语法糖”。
我强烈建议您切换到其中一个较新的API,即使您不打算使用foreach
进行循环,因为正如我所说,旧的foreach
函数已弃用,这意味着它们很可能完全从未来的PHP版本中删除。因此,如果您希望代码在未来继续运行,那么现在就应该切换。
答案 2 :(得分:1)
无法使用foreach
迭代结果集。
foreach
仅适用于已提取数据的情况。
所以你的朋友错了,他的建议毫无意义。
答案 3 :(得分:0)
@zerkms
我也这样认为。.但是下面的作品...
我的'tbl_login'表结构也作为
附加<?php
include '../common/dbConnection.php';
class foreachtest{
function foreachtesting(){
$sql="SELECT * FROM tbl_login";
$query_result=$GLOBALS['con']->query($sql);
return $query_result;
}
}
$myobject = new foreachtest();
$result=$myobject->foreachtesting();
foreach ($result as $a){
echo $a['username'];
}
?>