2014-09-01 107 views
0

顯示行我一直在掙扎了一段時間才能得到下面的代碼運行,它不是返回任何東西:PDO - 從Select語句

try { 
    $DBH = new PDO("mysql:host=$dbHost;dbname=$dbDatabase", $dbUser, $dbPass); 
    $DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $STH = $DBH->prepare('SELECT * FROM `component`'); 
    # setting the fetch mode 
    $STH->setFetchMode(PDO::FETCH_ASSOC); 

    while($row = $STH->fetchAll()) { 
    echo $row['cid'] . "\n"; 
    echo $row['cdesc'] . "\n"; 
    echo $row['cinfo'] . "\n"; 
    } 
} 
catch(PDOException $e) { 
    echo "I'm sorry. I'm afraid I can't do that."; 
    echo $e->getMessage(); 
} 

任何援助將不勝感激。 RGDS,燉

回答

1

您錯過了execute方法。 fetchAll的錯誤用法。

Example #1 Fetch all remaining rows in a result set

又如與fetchMode:

$STH = $DBH->prepare('SELECT * FROM `component`'); 
$STH->execute(); 
$STH->setFetchMode(PDO::FETCH_ASSOC); 

// since PDOStatement implements Traversable you can directly iterate 
foreach ($STH as $row) { 
    echo $row['cid'] . "\n"; 
} 
+0

+1,我錯過了。 – 2014-09-01 17:38:57

+0

得到它的工作,非常感謝 – Stew 2014-09-01 17:41:23

2

fetchAll返回所有的行,如果你想遍歷結果,你可以使用:

while($row = $STH->fetch()) 

或者,如果你想堅持fetchAll()

$rows = $STH->fetchAll(); 
foreach($row in $rows){ 
    ... 
} 

由於bitWorking指出你也錯過了致電execute

$STH = $DBH->prepare('SELECT * FROM `component`'); 
$STH->execute(); 
# setting the fetch mode 
$STH->setFetchMode(PDO::FETCH_ASSOC); 
+0

感謝您的投入,我不介意,我用哪一個,我不能得到任何工作,雖然。 – Stew 2014-09-01 17:36:14

+0

您錯過了對「執行」的調用,而且我也參與了@bitWorking的回答。 – 2014-09-01 17:38:22

+0

出於興趣,最好在'fetch'和'fetchALL'之間使用 – Stew 2014-09-01 17:42:28