[英]How to fetch database result as a stream using PHP/Zend Framework1
[英]How to fetch the result of a query in Zend
我需要在一个变量中获得平均分。 我正在使用zend,并且尝试了两个查询,但没有一个在工作:
$avg_query = $db->query("SELECT sid, AVG(score)
FROM markstable GROUP BY sid");
$avg_query = $db->query("SELECT sid, AVG(score)
FROM markstable WHERE sid = '$sid'");
$avg_score = $db->fetchAll($avg_query);
echo $avg_score; gives nothing
echo $avg_score['$sid']; gives nothing
我需要将avg_score
存储在其他表中。
您可以使用它来获取按sid分组的平均值。
$avg_score = $db->fetchAll("SELECT sid,AVG(score) FROM st GROUP BY sid");
foreach($avg_score as $row) {
echo $row["sid"]." ".$row["AVG(score)"];
}
如果第二次查询:
$avg_score = $db->fetchRow("SELECT sid,AVG(score) FROM st where sid=1");
echo $avg_score["AVG(score)"];
尝试使用fetchPairs()而不是fetchAll()
编辑:Zend_Db确实有一个fetchPairs();。
http://framework.zend.com/manual/1.12/zh/zend.db.adapter.html#zend.db.adapter.select.fetchpairs
同时删除数组索引中的变量的引号
echo $avg_score[$sid];
您尝试查询数据库时混合了语法。
query()
方法构建并执行所需的查询。 您的第一个查询应返回结果,无需提供任何其他代码:
$avg_query = $db->query("SELECT sid, AVG(score) FROM markstable GROUP BY sid");
Zend_debug::dump($avg_query);//same as var_dump but already includes <pre> tags
您的第二个查询需要在数组中包含所有绑定值作为第二个参数:
$avg_query = $db->query("SELECT sid, AVG(score) FROM markstable WHERE sid = ?", array($sid);
Zend_debug::dump($avg_query);//same as var_dump but already includes <pre> tags
您还可以使用标准的提取方法执行此查询,只需将SQL作为字符串传递:
$avg_score = $db->fetchAll("SELECT sid, AVG(score) FROM markstable GROUP BY sid");
Zend_debug::dump($avg_score);//same as var_dump but already includes <pre> tags
在处理Zend_Db
组件时,您可能还习惯于在查询( ?
)中使用占位符,因为许多组件已弃用了旧式语法。
这可能不是您正在做的事情的最佳解决方案。 但是,它确实回答了您的问题。 与Zend Framework中的数据库进行交互的方式有很多,使用Zend_Db_Adapter
组件和方法通常不是完成任务的最佳方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.