我在网上进行了研究,但大多数示例或说明似乎并不适用于我要完成的任务。
简而言之,我的代码应该完成以下任务:
从我的php脚本调用存储过程,该脚本返回我想循环的数据集并在表中生成行(用于在线显示)。但是,我的表中的一个字段必须调用一个单独的表(甚至不需要首先使用存储过程)来计算受UserID影响的总行数。
我的脚本会返回以下错误:
SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询。考虑使用PDOStatement :: fetchAll()。或者,如果您的代码只是针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。
<body>
<table border='0' cellpadding='0' cellspacing='1'>
<thead>
<tr bgcolor='#E0EBF1'>
<th>Agent NO</th>
<th>Comm Lvl</th>
<th>Agent Name</th>
<th>Address</th>
<th>parent_agent_name</th>
<th>Contacts</th>
<th>45 Day</th>
<th>STS</th>
</tr>
</thead>
<tbody>
<?php
$agetnumber = 123456789;
try {
$db = new PDO('mysql:host=localhost;dbname=DBNAME', 'USER', 'PW');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->query('CALL hier($agentnumber)');
foreach($stmt as $row)
{
$sql = $db->query("SELECT AGENT FROM activity WHERE AGENT = '$row[AGTNO]");
$foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>",
$row["AGTNO"], $row["AGTCOMMLVL"],
$row["AGTFNAME"]."<br><i>Contracted: ".$row["KDATE"],
$row["parent_agent_id"],
$row["parent_agent_name"],
$row["commission_level"],
$foundrows,
$foot);
}
$db->commit();
}
catch (PDOException $e)
{
$db->rollback();
echo $e->getMessage();
exit;
}
影响代码的行是:
$sql = $db->query("SELECT AGENT FROM activity WHERE AGENT = '$row[AGTNO]");
$foundrows = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
删除它们“摆脱”错误,但我无法拉出每个结果行集所需的$ foundrows变量。
以前有人遇到过这个问题吗?
答案 0 :(得分:0)
由于您的查询不包含LIMIT,因此我不确定您使用FOUND_ROWS()的原因。你不能简单地SELECT COUNT(*) FROM activity WHERE AGENT = '$row[AGTNO]
吗?
修改强>
事实上,如果我在两行之间阅读,我认为你可以在一个查询中获得所需的一切。这可能过于简化,因为我没有hier
程序的所有细节,但它类似于:
SELECT ag.AGTNO, ag.AGTCOMMLVL, /* etc. */, count(ac.AGENT) as foundrows
FROM agent ag
LEFT JOIN activity ac
on ag.AGTNO = ac.AGENT