dongningwen1146 2017-05-01 11:14
浏览 88
已采纳

while循环中的对象

Why does the following code work to print an array of mysql rows

    $base=new mysqli("...");        
    $query="SELECT *somthing* FROM *table* WHERE *some match*";
    $result=$base->query($query);
    while ($row=$result->fetch_assoc()) {
        var_dump($row);      
    };

, while this one get's trapped repeatedly printing the first match?

    $base=new mysqli("...");        
    $query="SELECT *somthing* FROM *table* WHERE *some match*";        
    while ($row=$base->query($query)->fetch_assoc()) {
        var_dump($row);          
    };
  • 写回答

1条回答 默认 最新

  • dongshou6041 2017-05-01 11:21
    关注

    Because in the second example you're calling the query as well as the result in every iteration of the loop, which means the first result from the query's result set will be returned used in fetch_assoc each time.

    Take this for example to illustrate the example:

    class Test
    {
        public function getQuery()
        {
            echo 'x';
            return $this;
        }
    
        public function getResult()
        {
            echo 'y';
            return $this;
        }
    }
    

    If you loop while ($row = $class->getQuery()->getResult()) { then the echo statements above will output both x and y each time. This highlights the symptom you're seeing where you keep getting the first result each time: xyxyxyxy...

    Again - if you run the above class in the form of $query = $class->getQuery() then while ($row = $query->getResult()) { you will see one "x" and plenty of "y"s: xyyyyyyy...

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了