如何在 mysqli 查询中使用 while 循环
Posted
技术标签:
【中文标题】如何在 mysqli 查询中使用 while 循环【英文标题】:How to use while loops in mysqli query 【发布时间】:2012-09-30 16:55:15 【问题描述】:对于这个非常愚蠢的问题,我深表歉意。我有这样的代码,我希望结果在while循环中完成。我之前使用的是mysql,查询很简单并且执行得很好。 例子
$sql_query = mysql_query($query);
while($row = mysql_fetch_array($sql_query)
$data_a = $row['a']; $data_b = $row['b'];
现在我使用 oop,并且我有一个数据库类和一个连接处理程序,它被注入到从数据库类扩展的新类中。我的问题不是在代码执行后,我得到这个错误方法 *mysqli_stmt::fetch_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; ?>" />
</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();
?>
请有人帮我调试一下
【问题讨论】:
如果可以避免,请不要使用 mysql_* 函数,它们已不再维护,社区已开始弃用。相反,您应该了解准备好的语句并使用 PDO 或 MySQLi。 您可能会发现 this post 与您的主题相关。 【参考方案1】:让我们看看你之前有什么
$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
这是错误的。只是告诉你。我建议你先搜索一些运行良好的mysqli_*
教程。一种解释如何构建 SQL 查询并触发它们和解释prepared statements 是什么以及如何使用它们。
我的建议:从 PHP 手册开始,它比较了不同的库并展示了所有 mysql、mysqli 和 PDO 的示例。
您甚至可以并排比较 mysql 和 mysqli,以便更轻松地迁移:Dual procedural and object-oriented interface。
【讨论】:
感谢您的好评和建议。但是,你有我可以检查的链接吗?这里关于***的大部分问题都没有解决我的问题。 我编辑了问题并留下了两个链接,请随时重新加载。还 browse 扩展程序的手册页。在此处查找示例,此处关于 SO 的答案无法完成与手册相同的工作。继续阅读;)以上是关于如何在 mysqli 查询中使用 while 循环的主要内容,如果未能解决你的问题,请参考以下文章
PHP mysqli_fetch_array() 不会在 while 循环中将所有选择查询插入到表中