Почему PDOStatement-> columnCount не возвращает правильное число? - PullRequest
1 голос
/ 01 февраля 2011

Сначала я запрашиваю базу данных, чтобы получить все записи, связанные с определенным идентификатором пользователя, затем мне нужно войти и изменить массив, потому что одно из полей - это идентификатор, и мне нужно имя, связанное с этим идентификатором.

Так что я использую columnCount, чтобы перебрать итоговый массив по индексу id и заменить его на правильное имя, которое отлично работает для первых шести результатов. Параметр columnCount возвращает только 6, но первые шесть переименовываются, как и должно быть. Но вне этого он берет результаты этого pdostatement и заполняет таблицу обычным способом, со всеми соответствующими данными, 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";
    }

1 Ответ

2 голосов
/ 01 февраля 2011

В первом запросе SELECT вы запросили шесть столбцов:

SELECT facility_id, program, date, visit_length, mileage, served FROM timesheet_db WHERE volunteer_id = $_SESSION['user_id']

Итак, естественно, columnCount() равно 6. Он не умножает количество столбцов на количество возвращаемых строк или что-то в этом роде.

Если вам нужно количество строк , вам нужно count($arrValues) (в руководстве говорится, что поведение базы данных с rowCount() несовместимо с SELECT с).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...