0

私は phpro.org から PDO について学んでいますが、少し混乱しています。

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

ウイドとは?どのような値を入力すればよいですか?

そして、クエリについて

<?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

なぜか教えてくれますか?

4

2 に答える 2

1

2 番目の質問:

fetchAll()の代わりにを使用する必要がありfetch()ます。一度に 1 行しか表示されません。

コードで次を試してください: $result = $stmt->fetchAll(PDO::FETCH_ASSOC);(ただし、foreach ループの外観が変わります)。

または、while ループを使用して、必要に応じて各行をフェッチすることもできます。

while ($row = $stmt->fetch(PDO::FETCH_ASSOC)){
    //Do something with $row
}
于 2012-06-14T02:51:33.020 に答える
1

uid は、データベースに接続するユーザー名です。mdb ファイルが保護されていない場合は、このパラメーターを省略できます。

すべての結果を取得するには、fetchAll (http://php.net/manual/en/pdostatement.fetchall.php) を使用する必要があります。

于 2012-06-14T02:52:07.040 に答える