我正在努力使用相当于以下查询的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"] =>字符串(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] =&gt;数组([Weeks] =&gt; 16 [0] =&gt; 16)),但不是我想要的输出,这是相关的数字来自查询的周数。我已尝试使用各种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 并尝试了各种组合无济于事。说实话,即使有些随机工作,我也不知道为什么会开始质疑我对数组的理解。
一如既往,我会感激一两个指针吗?
非常感谢, 杰森
答案 0 :(得分:8)
我认为你在寻找:
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。
答案 1 :(得分:4)
您可能希望使用:
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "about to print";
echo "<br>";
print_r($row);
echo "<br>";
echo $row['Weeks'];
echo "<br>";
echo "printed";
}
PDO :: FETCH_ASSOC部分使系统返回一个关联数组
有关参数的更多信息 - PHP PDO fetch()
答案 2 :(得分:2)
fetchAll
返回包含所有结果的数组。所以试试:
foreach($stmt->fetchAll() as $row) {
// ...
}
答案 3 :(得分:1)
您只需要一个结果,所以只需使用fetchColumn
:
$stmt = $dbLink->prepare($new);
$stmt->execute();
$weeks = $stmt->fetchColumn();