База данных запросов PDO ODBC

Я на пути к изучению PDO с phpro.org и немного запутался.

<?php
try {
    $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\pdo-tutorial.mdb;Uid=Admin");
    }
catch (PDOException $e)
    {
    echo $e->getMessage();
    } 
?>

Что такое UID? и какое значение я должен ввести?

А по поводу запроса

<?php

try {
    $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\pdo-tutorial.mdb;Uid=Admin");
    /*** echo a message saying we have connected ***/
    echo 'Connected to database<br />';

    /*** The SQL SELECT statement ***/
    $sql = "SELECT * FROM animals";

    /*** fetch into an PDOStatement object ***/
    $stmt = $dbh->query($sql);

    /*** echo number of columns ***/
    $result = $stmt->fetch(PDO::FETCH_ASSOC);

    /*** loop over the object directly ***/
    foreach($result as $key=>$val)
    {
    echo $key.' - '.$val.'<br />';
    }

    /*** close the database connection ***/
    $dbh = null;
}
catch(PDOException $e)
    {
    echo $e->getMessage();
    }
?>

Я использую odbc, но почему функции foreach просто повторяют первую строку, а не зацикливают все мое значение в базе данных? вот результат.

Connected to database
ID - 1
animal_type - kookaburra
animal_name - bruce

ты можешь сказать мне, почему?


person yudayyy    schedule 14.06.2012    source источник


Ответы (2)


По вашему второму вопросу:

Вам нужно использовать fetchAll() вместо fetch(), что дает вам только одну строку за раз.

В своем коде попробуйте: $result = $stmt->fetchAll(PDO::FETCH_ASSOC); (хотя это изменит внешний вид вашего цикла foreach).

Кроме того, вы можете использовать цикл while для выборки каждой строки по мере необходимости:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    //Do something with $row
}
person Kevin S.    schedule 14.06.2012

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

Чтобы получить все результаты, вы должны использовать fetchAll (http://php.net/manual/en/pdostatement.fetchall.php).

person deej    schedule 14.06.2012