Php 如何在mysqli查询中使用while循环

Php 如何在mysqli查询中使用while循环,php,mysqli,Php,Mysqli,我为这个愚蠢的问题感到抱歉。我有一个这样的代码,我希望结果在while循环中完成。我以前使用过mysql,查询很简单,执行得很好。 范例 现在我使用oop,我有一个数据库类和一个连接处理程序,它被注入到从数据库类扩展而来的新类中。我的问题是在代码执行之后,我得到了这个错误方法*mysqli\u stmt::fetch\u assoc()*这是我的代码 <?php class recentWorks extends DatabaseModelBase { public function s

我为这个愚蠢的问题感到抱歉。我有一个这样的代码,我希望结果在while循环中完成。我以前使用过mysql,查询很简单,执行得很好。 范例

现在我使用oop,我有一个数据库类和一个连接处理程序,它被注入到从数据库类扩展而来的新类中。我的问题是在代码执行之后,我得到了这个错误方法*mysqli\u stmt::fetch\u assoc()*这是我的代码

<?php
class recentWorks extends DatabaseModelBase
{

public function show($tbl, $num_to_show, $site_url="") 
{

    $statement = $this->prepare('SELECT * FROM '.$tbl.' WHERE RAND()<(SELECT (( '.$num_to_show.' /COUNT(*))*10) FROM '.$tbl.' ) ORDER BY RAND() LIMIT  '.$num_to_show.'  ');
    $statement->execute();
    while ($recent_results = $statement->fetch_assoc())
    {
        $featured_work_name=$recent_results['name']; $featured_work_url=$recent_results['url']; $featured_work_thumb=$recent_results['img_thumb'];
        $featured_work_id=$recent_results['id'];$featured_work_desc=$recent_results['desc'];$featured_work_img=$recent_results['img_url'];
        ?>
  <li> 
  <a href="<?php echo $featured_work_img; ?>" class="fancybox thumb poshytip" title="Click To View Enlarged Image">
  <img src="<?php echo $featured_work_thumb; ?>" width="282px" height="150px" alt="<?php echo $featured_work_name; ?>' Image" />
  </a>
 <div class="excerpt">

 <span class="main_header"><a href="<?php echo $featured_work_url; ?>" target="_blank" class="poshytip recent-link" title="Click To Visit Website"><?php echo ucwords($featured_work_name); ?></a>
 </span>
<?php echo substr($featured_work_desc,0,300); ?>
</div>
</li>
        <?php
    }
    $statement->close();
    }

  }
 ?>

  • 请有人帮我调试一下这个

    让我们看看你以前有什么

    现在让我们看看您现在有什么(选定的行)


    $statement=$this->prepare('SELECT*FROM.$tbl.'WHERE RAND()谢谢你的评论和建议。但是,你有和我可以检查的链接吗?这里关于stackoverflow的大多数问题并不能解决我的问题。我编辑了问题并留下了两个链接,请随意重新加载。还可以从扩展中浏览手册页。在那里查找示例,这里有一个答案,因此无法完成与手册有。请继续阅读;)如果可以避免,请不要使用mysql_*函数,它们不再被维护,社区已经开始了弃用过程。相反,你应该学习准备好的语句,并使用PDO或MySQLi。你可能会发现它们与你的主题相关。
    
    <?php
    class recentWorks extends DatabaseModelBase
    {
    
    public function show($tbl, $num_to_show, $site_url="") 
    {
    
        $statement = $this->prepare('SELECT * FROM '.$tbl.' WHERE RAND()<(SELECT (( '.$num_to_show.' /COUNT(*))*10) FROM '.$tbl.' ) ORDER BY RAND() LIMIT  '.$num_to_show.'  ');
        $statement->execute();
        while ($recent_results = $statement->fetch_assoc())
        {
            $featured_work_name=$recent_results['name']; $featured_work_url=$recent_results['url']; $featured_work_thumb=$recent_results['img_thumb'];
            $featured_work_id=$recent_results['id'];$featured_work_desc=$recent_results['desc'];$featured_work_img=$recent_results['img_url'];
            ?>
      <li> 
      <a href="<?php echo $featured_work_img; ?>" class="fancybox thumb poshytip" title="Click To View Enlarged Image">
      <img src="<?php echo $featured_work_thumb; ?>" width="282px" height="150px" alt="<?php echo $featured_work_name; ?>' Image" />
      </a>
     <div class="excerpt">
    
     <span class="main_header"><a href="<?php echo $featured_work_url; ?>" target="_blank" class="poshytip recent-link" title="Click To Visit Website"><?php echo ucwords($featured_work_name); ?></a>
     </span>
    <?php echo substr($featured_work_desc,0,300); ?>
    </div>
    </li>
            <?php
        }
        $statement->close();
        }
    
      }
     ?>
    
    $sql_query = mysql_query($query);
       `----- missing error checking and handling
    while ($row = mysql_fetch_array($sql_query))
             `---- missing error handline
    {
        $data_a = $row['a']; $data_b = $row['b'];
               `----- complicated way of setting variables as arrays
    }
    
    $statement = $this->prepare('SELECT * FROM '.$tbl.' WHERE RAND()<(SELECT (( '.$num_to_show.' /COUNT(*))*10) FROM '.$tbl.' ) ORDER BY RAND() LIMIT  '.$num_to_show.'  ');
                           `---- using prepare as if it would have been mysql_query()
    $statement->execute();
                `----- same here