我正在努力处理 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();
并转储变量,我得到 array(1) { [0]=> array(2) { ["Weeks"]=> string(2) "16"[0]=> string(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 并尝试了各种组合无济于事。老实说,即使某些事情随机发生,我也更愿意知道原因并开始质疑我对数组的理解。
一如既往,请给我一两个指点,我将不胜感激?
非常感谢, 杰森
最佳答案
我想你正在寻找:
while($row = $stmt->fetch(/* PDO::FETCH_ASSOC */)) {
// do loop stuff
}
PDO::fetchAll()
返回所有查询结果的关联数组(二维数组)。根据 PHP 文档,不建议将此用于大型结果集。 PDO::fetch()
仅返回结果集中的一行并模仿 mysql_fetch_array()
。参见 http://php.net/manual/en/function.mysql-fetch-array.php了解更多详情。
关于php - 相当于 mysql_fetch_array 的 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26142444/