2012-06-14 74 views
0

我正在從phpro.org學習PDO,並且有點困惑。PDO查詢數據庫ODBC

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

你能告訴我爲什麼嗎?

回答

1

關於第二個問題:

您需要使用fetchAll(),而不是fetch(),只給你一次一行。

在你的代碼中,試試: $result = $stmt->fetchAll(PDO::FETCH_ASSOC);(儘管這會改變你的foreach循環的樣子)。

或者,你可以使用while循環來獲取每一行,你需要它:

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

UID與要連接到數據庫的用戶名,如果您的MDB文件沒有被保護,你可以省略這個參數。

要獲取所有結果,您必須使用fetchAll(http://php.net/manual/en/pdostatement.fetchall.php)。