Php 为什么PDO声明->;columnCount没有返回正确的数字?

Php 为什么PDO声明->;columnCount没有返回正确的数字?,php,pdo,Php,Pdo,我首先查询数据库以获取与某个用户id关联的所有记录,然后我需要进入并修改数组,因为其中一个字段是id,我需要与该id关联的名称 因此,我使用columnCount在id的索引处迭代生成的数组,并将其替换为正确的名称,这对于前六个结果效果良好。columnCount仅返回6,但前六个将按原样重命名。但除此之外,它从PDO语句中获取结果,并使用所有相关数据填充表,目前为17行 为什么返回6,或者我怎么做才能得到错误的列数 global $__CMS_CONN__; $timeqry = 'S

我首先查询数据库以获取与某个用户id关联的所有记录,然后我需要进入并修改数组,因为其中一个字段是id,我需要与该id关联的名称

因此,我使用columnCount在id的索引处迭代生成的数组,并将其替换为正确的名称,这对于前六个结果效果良好。columnCount仅返回6,但前六个将按原样重命名。但除此之外,它从PDO语句中获取结果,并使用所有相关数据填充表,目前为17行

为什么返回6,或者我怎么做才能得到错误的列数

global $__CMS_CONN__;
    $timeqry = 'SELECT facility_id, program, date, visit_length, mileage, served FROM timesheet_db WHERE volunteer_id = '.$_SESSION['user_id'];
    $stmt = $__CMS_CONN__->prepare($timeqry);
    $stmt->execute();
    $columns = $stmt->columnCount();
    print $columns;
    if($stmt)
    {
        $arrValues = $stmt->fetchAll(PDO::FETCH_ASSOC);

        for($x=0;$x<$stmt->columnCount();$x++)
        {
            global $__CMS_CONN__;
            $qry = 'SELECT facility FROM facility_db WHERE id = '.$arrValues[$x]['facility_id'];
            $stmt1 = $__CMS_CONN__->prepare($qry);
            $stmt1->execute();
            if($stmt1)
            {
                $facilityName = $stmt1->fetchAll(PDO::FETCH_ASSOC);
                foreach ($facilityName as $item)
                {
                    foreach ($item as $key => $val)
                    {
                        $arrValues[$x]['facility_id'] = $val;
                    }
                }
            }
        }
        print "<table style=\"font-size:90%\">\n";
        print "<tr>\n";
        print "<th style=\"width:100%\">Facility</th>";
        print "<th>Program</th>";
        print "<th>Date</th>";
        print "<th>Visit Length</th>";
        print "<th>Mileage</th>";
        print "<th>Served</th>";
        print "</tr>";
        foreach ($arrValues as $row)
        {
            print "<tr>";
            foreach ($row as $key => $val)
            {
                print "<td>$val</td>";
            }
            print "</tr>\n";
        }
        print "</table>\n";
    }
global$\uuu CMS\u CONN\uuuu;
$timeqry='选择设施id、计划、日期、就诊长度、里程,从时间表\u db中选择志愿者id='。$\u会话['user\u id'];
$stmt=$\uuu CMS\u CONN\uuuuu->prepare($timeqry);
$stmt->execute();
$columns=$stmt->columnCount();
打印$columns;
如果($stmt)
{
$arrValues=$stmt->fetchAll(PDO::FETCH_ASSOC);
对于($x=0;$xcolumnCount();$x++)
{
全球$CMS\U CONN\uuuuuuuuuu;
$qry='从facility_db中选择facility,其中id='。$arrValues[$x]['facility_id'];
$stmt1=$\u CMS\u CONN\u->准备($qry);
$stmt1->execute();
如果($stmt1)
{
$facilityName=$stmt1->fetchAll(PDO::FETCH_ASSOC);
foreach($facilityName作为$item)
{
foreach($key=>$val的项目)
{
$arrValues[$x]['facility_id']=$val;
}
}
}
}
打印“\n”;
打印“\n”;
打印“设施”;
打印“程序”;
打印“日期”;
打印“访问长度”;
打印“里程”;
打印“已送达”;
打印“”;
foreach($arr值为$row)
{
打印“”;
foreach($key=>$val的行)
{
打印“$val”;
}
打印“\n”;
}
打印“\n”;
}

您在第一个
选择
查询中要求六列:

SELECT facility_id, program, date, visit_length, mileage, served FROM timesheet_db WHERE volunteer_id = $_SESSION['user_id']
因此,
columnCount()
自然是6。它不会将列计数乘以返回的行数或类似的数字


如果需要行数,则需要
count($arrValues)
(手册中说数据库行为与
SELECT
s不一致)。

LOL!我真的觉得自己像个笨蛋。我想知道结果的数量returned@Ryan:这是
行数
。但是,如果要迭代行,为什么不直接执行foreach($stmtas$row)
。PDO太棒了,为什么不利用它的惊人?是的,我在找rowCount,我想我需要一些咖啡什么的。谢谢你叫醒我。@nikic:我也想到了
rowCount()
,但手册上说它可能不会计算使用
SELECT
选择的行数,因此不应该依赖它。