PDO相当于mysql_fetch_array

Jas*_*son 4 php mysql arrays pdo

我正在努力使用相当于以下查询的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'];
}
Run Code Online (Sandbox Code Playgroud)

我在哪里这是......

//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();
Run Code Online (Sandbox Code Playgroud)

如果我添加$ count = $ stmt-> fetchAll();

并转储变量,我得到array(1){[0] => array(2){["Weeks"] => string(2)"16"[0] => string(2)"16"}}

如果我更换

$count = $stmt->fetchAll();
Run Code Online (Sandbox Code Playgroud)

while ($row = $stmt->fetchAll())  {
echo "about to print";
echo "<br>";
print_r($row);
echo "<br>";
echo $row['Weeks'];
echo "<br>";
echo "printed";
}
Run Code Online (Sandbox Code Playgroud)

我得到了一个不同的数组变量 - Array([0] =>数组([Weeks] => 16 [0] => 16)),但不是我想要的输出,这是与查询中的Weeks相关的数字.我已尝试使用各种echo/print_r进行错误检查,以尝试查看输出与预期输出的匹配位置.

查询工作正常,原始的mysql_query版本也可以工作,所以我显然误解了PDO如何处理数组以及如何从数组中提取项目.

我看过 如何使用PDO在PHP中获取结果数组? 以及 如何在PDO fetchAll中正确使用while循环 并尝试各种组合无济于事.说实话,即使随机工作,我也想知道为什么,并开始质疑我对数组的理解.

一如既往,我会感激一两个指针吗?

非常感谢,杰森

Joe*_*ano 9

我想你正在寻找:

while($row = $stmt->fetch(/* PDO::FETCH_ASSOC */)) {
    // do loop stuff
}
Run Code Online (Sandbox Code Playgroud)

PDO::fetchAll()返回所有查询结果的关联数组(二维数组).根据PHP文档,不建议将其用于大型结果集. PDO::fetch()返回结果集中的一行并模仿mysql_fetch_array().有关更多详细信息,请参见http://php.net/manual/en/function.mysql-fetch-array.php.

  • 澄清一下,`PDO::FETCH_ASSOC` 被注释掉了,因为默认值是 `PDO::FETCH_BOTH`,它 _"返回一个由列名和 0 索引列号索引的数组"_ (http://php.net/手册/en/pdostatement.fetch.php) (2认同)

Mik*_*lis 6

您可能想要使用:

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";
}
Run Code Online (Sandbox Code Playgroud)

PDO::FETCH_ASSOC 部分使系统返回一个关联数组

更多关于参数 - PHP PDO fetch()