【发布时间】:2014-10-01 13:22:22
【问题描述】:
我正在努力处理与以下查询等效的 PDO,它计算了队列中有多少新项目并计算出完成它们的周数,从而给了我一个工作堆栈时间表:-
//count new to be made
$new = "SELECT FLOOR(SUM(TotalNew) / 7) AS Weeks FROM
(
SELECT YEAR( date_ready ) , MONTHNAME( date_ready ) ,
STATUS , COUNT(
STATUS ) AS TotalNew
FROM new
WHERE
(STATUS = 'new'
OR STATUS = 'progress')
GROUP BY YEAR( date_ready ) , MONTHNAME( date_ready ) ,
STATUS ORDER BY YEAR( date_ready ) , MONTH( date_ready )
) Total";
$count = mysql_query($new) or die(mysql_error());
while($row = mysql_fetch_array($count)) {
$weeks = $row['Weeks'];
}
我要的是这个......
//count new to be made
$new = "SELECT FLOOR(SUM(TotalNew) / 7) AS Weeks FROM
(
SELECT YEAR( date_ready ) , MONTHNAME( date_ready ) ,
STATUS , COUNT(
STATUS ) AS TotalNew
FROM new
WHERE
(STATUS = 'new'
OR STATUS = 'progress')
GROUP BY YEAR( date_ready ) , MONTHNAME( date_ready ) ,
STATUS ORDER BY YEAR( date_ready ) , MONTH( date_ready )
) Total";
//get count data fromdb
$stmt = $dbLink->prepare($new);
$stmt->execute();
如果我添加 $count = $stmt->fetchAll();
并转储变量,我得到 数组(1){[0]=>数组(2){[“周”]=>字符串(2)“16”[0]=>字符串(2)“16”}}
如果我替换
$count = $stmt->fetchAll();
与
while ($row = $stmt->fetchAll()) {
echo "about to print";
echo "<br>";
print_r($row);
echo "<br>";
echo $row['Weeks'];
echo "<br>";
echo "printed";
}
我得到了数组的不同变体 - Array ( [0] => Array ( [Weeks] => 16 [0] => 16 ) ),但不是我想要的输出,即与 Weeks 相关的数字查询。我尝试使用各种 echo / print_r 进行错误检查,以尝试查看输出与预期输出匹配的位置。
查询工作正常,原始 mysql_query 版本也工作,所以我显然误解了 PDO 如何处理数组以及如何从数组中拉出一个项目。
我看过 How to use PDO to fetch results array in PHP? 和 how to properly use while loop in PDO fetchAll 并尝试了各种组合无济于事。老实说,即使某些东西随机起作用,我也更想知道原因,并开始质疑我对数组的理解。
和往常一样,我会很感激一两个指针吗?
非常感谢, 杰森
【问题讨论】:
-
看here
-
我认为你在滥用 fetchall。它以数组数组的形式返回整个结果集(每个内部数组代表集合中的一行),然后关闭结果集,因此对 fetchall 的后续调用将不会返回任何内容。您需要将第一次调用 fetchall 分配给一个变量并使用该变量,直到您完成结果。