【问题标题】:how to use foreach loop in generating the result of mysql_query如何使用 foreach 循环生成 mysql_query 的结果
【发布时间】:2013-02-06 11:18:54
【问题描述】:

我总是使用while循环在我的数据库中生成所有记录,我的一些朋友告诉我最好使用foreach从数据库中生成记录,但我不知道如何。

<?php
    $query =  mysql_query("select * from sampleTABLE");
    while($i =  mysql_fetch_array){
    echo $i['samplefieldName'];
    }
?>

我的问题是,如何使用 foreach 显示我的数据库中的记录?有人可以在while循环中比较它的语法并生成结果吗,谢谢。

【问题讨论】:

  • "我的一些朋友告诉我,最好使用 foreach 从数据库生成记录" --- 不要再听那个家伙了,他不明白他在说什么关于。
  • PS:当有人给你一些建议时——不要盲目相信,而是要问一些参考/证明
  • 对不起,我是菜鸟,我只是好奇其他人的建议...... ;(
  • 我想这个问题的真正教训是:(1)不要使用mysql_query();为您的数据库访问切换到更好的 API 和 (2) 是的,如果您使用其中一种更好的 API,您可以将foreach 用于记录集,但它并不比while“更好”;这只是做同一件事的不同方式。

标签: php


【解决方案1】:

正如@Zerkms 所说,这里不需要使用 foreach 而不是 while

 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
}

注意

  1. 整个ext/mysql PHP 扩展,它提供所有以前缀mysql_ 命名的函数,是officially deprecated as of PHP v5.5.0,将来会被删除。所以使用PDOMySQLi

好读

  1. The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
  2. PDO Tutorial for MySQL Developers
  3. Pdo Tutorial For Beginners

【讨论】:

  • 我在询问 foreach 循环 ;-( 它如何用于从数据库生成记录
  • @Robert John Concepcion:你问的没有意义
【解决方案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 循环,这就是你的朋友不太正确的地方,因为这里whileforeach 之间确实没有任何区别。从while 切换到foreach 不会对代码的性能产生任何影响。他们在引擎盖下做同样的事情。 foreach 在这种情况下实际上只是“语法糖”。

我强烈建议切换到这些较新的 API 之一,即使您不打算使用 foreach 进行循环,因为正如我所说,旧的 mysql 函数已被弃用,这意味着它们可能会从未来的 PHP 版本中完全删除。因此,如果您希望您的代码在未来继续运行,您应该立即切换。

【讨论】:

    【解决方案3】:

    无法使用foreach 迭代结果集。

    foreach 仅适用于您已经获取数据的情况。

    所以你的朋友错了,他的建议没有任何意义。

    【讨论】:

    • foreach 与迭代器一起使用。 mysqliPDO 记录集是迭代器。因此,尽管如果他的朋友专门谈论 mysql_query() 是错误的,但他在更一般的意义上是正确的,因为 可以将 foreach 与 DB 记录集一起使用。
    • @SDC: "他是对的" "朋友告诉我最好使用 foreach" --- 在宇宙中foreachwhile更好 ?你会如何比较它们?
    • 重读我的句子:“他在更一般的意义上是对的,因为它是可能的”。我并没有说它是否更好,但我说你说这根本不可能是不正确的。我们都知道,whileforeach 在逻辑上没有真正的区别。在这种情况下使用foreach 是纯语法糖。
    • @SDC:有很大的不同。您不能将 foreach 用于不可迭代的事物。 “你说这根本不可能是不正确的。” ----证明你的话。展示如何使用 foreach 迭代 mysql_query 结果
    • @SDC:“但我说你说这根本不可能是不正确的”——我还是不正确吗?问题是关于mysql_query,我回答了关于mysql_query 的问题,我没有说其他DBAL。想法? “呃,我明明说了mysql_query不能用foreach。” --- 你明明说我错了。
    【解决方案4】:

    @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'];
        }
    
    ?>
    

    tbl_login MYSQL table screenshot

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2014-12-05
      • 2021-10-21
      • 1970-01-01
      • 2017-04-29
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      • 2017-03-10
      相关资源
      最近更新 更多