Не удается получить какие-либо данные с помощью функции fetch или fetchAll PDO.

Я был в этом в течение некоторого времени. Используя документацию PDO и основываясь на более старых сообщениях stackoverflow, я чувствую, что делаю это правильно, однако я не могу понять, где мои данные находятся в массиве, возвращаемом fetchAll. Любая помощь будет оценена по достоинству.

В моем классе DatabaseHandler:

public function getStateList(){
    $root = "root";
    $rootpasswd = "password";
    $host = "localhost";
    try{
        $dbh = new PDO("mysql:host=$host;dbname=TESTDATA;", $root, $rootpasswd);
        $stmt = $dbh->prepare("SELECT id FROM state");
        if(!$stmt->execute()){
            //error
        }
        $result = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $result;
    }catch(PDOExeption $e){
        //catch exception
    }
}

Теперь при вызове этого метода он возвращает массив из 52 идентификаторов, что и должно делать, однако я не могу получить эти данные. Почему? Вот код, который вызывает метод.

<?php
    require("./Database/DatabaseHandler.php");

    $dbh = new DatabaseHandler();
    $stateCodes = $dbh->getStateList();
    $max = sizeof($stateCodes);

    error_log("Arraysize=".$max."\n", 3, "/testlog/data.dat");
    error_log("Position 0: ".$stateCodes[0]."\n", 3, "/testlog/data.dat");
    error_log("Position[0][0]: ".$stateCodes[0][0]."\n", 3, "/testlog/data.dat");
    error_log("Position[0][0][0]: ".$stateCodes[0][0][0]."\n", 3, "/testlog/data.dat");
?>

Первый журнал ошибок записывает 52. Второй возвращает слово Array, из-за чего я думаю, что это 2-мерный массив. Третий ничего. Четвертое Ничто.

Я знаю, что неправильно использую fetchAll, но не могу понять, где и как. Заранее спасибо.


person seanr    schedule 24.09.2014    source источник
comment
Вы пробовали print_r($stateCodes)?   -  person Jay Blanchard    schedule 24.09.2014


Ответы (1)


Вы использовали PDO::FETCH_ASSOC, который будет ассоциативным массивом.

Но поскольку вы извлекаете все, массив является двумерным.

$stateCodes[0]['id'];

В качестве альтернативы вы можете зациклить таким образом:

foreach($stateCodes as $code){
    error_log("Code Id =" . $code['id']);
}
person meda    schedule 24.09.2014
comment
Итак, как я могу вернуть только идентификационный номер? Всегда ли мне придется явно запрашивать идентификатор через ['id'] - person seanr; 24.09.2014
comment
это то, что делает ваш запрос, возвращает идентификатор всех состояний - person meda; 24.09.2014
comment
если вы имеете в виду, что хотите получить доступ с помощью числового индекса, используйте PDO::FETCH_BOTH, чтобы вы могли сделать $stateCodes[0][0], но обычно FETCH_ASSOC более читабелен - person meda; 24.09.2014