2012-10-19 114 views
3

我想取我的網站從我的表中的所有記錄,我有以下循環導致PDO PHP

$sth = $conn->prepare("SELECT * FROM directory WHERE user_active != ''"); 
$sth->execute(); 

/* Exercise PDOStatement::fetch styles */ 
$result = $sth->fetch(PDO::FETCH_ASSOC); 
foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) { 
    echo $result[First_Name]; 
} 

只有它不是返回的所有記錄,只是我的第一次,任何人可以看到我的」錯了嗎?

+1

[爲什麼$ foo \ [bar \]錯誤?](http://php.net/manual/en/language.types.array.php#language.types.array.foo-bar) – deceze

+0

檢查第一個_name和姓氏的情況下,它可能會出現問題 –

+0

只需使用'fetchAll'而不是'fetch'。 – itachi

回答

6

嗯,你只能叫$sth->fetch一次。你需要循環結果。

while ($row = $sth->fetch(PDO::FETCH_ASSOC)) { 
    echo $row['First_Name'] . ' ' . $row['Surname'] . "\n"; 
} 

也不要不帶大括號的數組字符串索引。通過這種方式,PHP檢查密鑰是否爲CONSTANT,然後將其轉換爲字符串。這只是不好的做法,可能會導致意想不到的行爲。

如果這隻返回一行,那麼您可能只有一行數據庫(或結果集)。向我們展示更多代碼!

+0

這也只返回1個記錄@vaseliq? – Liam

11

你需要使用一個循環:

while ($result = $sth->fetch(PDO::FETCH_ASSOC)) { 
    echo $result[First_Name]; 
    echo ' ' . $result[Surname]; 
} 

或者你可以使用fetchAll方法:

foreach ($sth->fetchAll(PDO::FETCH_ASSOC) as $result) { 
    echo $result[First_Name]; 
    echo ' ' . $result[Surname]; 
} 

及注意事項:如果First_NameSurname不是常量,那麼你應該使用該字符串作爲密鑰名稱。

$result['First_Name']$result['Surname']

+0

由於某種原因,這隻會從我的表中返回1條記錄@xdazz – Liam

+0

可能只有1條記錄? – itachi

+0

或者,您使用的第一段代碼只有fetch(PDO :: FETCH_ASSOC)而不是fetchAll(PDO :: FETCH_ASSOC)。 –