Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: yudayyyОтветов: 2

Я на пути к изучению 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

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

odbcphpms-accesspdo

Ответы

Ответ 1 · рейтинг 1 · Kevin S.

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

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

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

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

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    //Do something with $row
}

Ответ 2 · рейтинг 1 · deej

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

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы