2013-04-17 55 views
1

如何更改此foreach語句,以便它將使用特定列中的所有行構建一個數組?它目前只將列'first_name'中的最後一行添加到數組中。此foreach語句只添加數組的最後一行

try { 
    $stmt = $conn->prepare("SELECT * FROM student"); 
    $stmt->execute(); 
} catch(PDOException $e) { 
    echo $e->getMessage(); 
} 
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC); 
$first_names = array(); 
foreach ($rows as $row) { 
    $first_names = $row['first_name']; 
} 
+0

更新了我的答案多一點澄清 –

+0

@RixhersAjazi - 我要收你的錢你的報價,並通過運行一個簡單的問題: - )找不到你的電子郵件地址,所以想知道你是否有幾分鐘的時間聊天 –

+0

我今晚會在。 –

回答

1

在你的代碼,你可以試試這個

array_push($first_names, $row['first_name']); 

$first_names[] = $row['first_name']; 

問題你一遍又一遍覆蓋你自己的變量。

+0

中學到最多的答案之間做出決定時,我一直都會被撕裂。那就是: - 出於好奇,會你介意解釋第一種方法?我想知道是否可以通過允許我定義數組並在相同的語句中使用它來切斷一步? –

+0

這是在手冊http://php.net/manual/en/function.array-push.php。您仍然需要一個數組,因爲您必須從每一行中提取列的值。 –

+0

謝謝你:-)我還在真正學習陣列:-)一種方法比另一種有好處,還是僅僅是個人偏好? –

1

你忘了括號。你需要這樣做:

$first_names[] = $row['first_name']; 

否則,你重新創建$ first_names變量作爲一個字符串,並與循環的每個迭代覆蓋它。

+0

我真的希望,所以讓我選擇接受多個答案。你肯定給了我最清楚的解釋是什麼導致了這個問題,當我必須在最好的答案和我從 –

1

您目前已經overriting你需要的東西它數組中的變量:

$first_names[] = $row['first_name']; 
1

你有你的變量`

$first_names[] = $row['first_name'];` 

還可以,我建議在做這個有點清潔方法加上括號?

你似乎使用您查詢的try/catch,可能用它在多數人身上,以及...

你其實應該使用

$pdo = new PDO("mysql:host=xxxxx;dbname=xxxxxxxx", $username, $password); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // < - - - THIS 

所以現在你贏了不需要將try/catch添加到代碼中。

通常你只需要使用try/catch,如果你不想在查詢失敗時做其他事情。

讀了這條herehere

享受:)

+0

感謝您的建議:-)我很好奇你關於try/catch的評論 - 我實際上是在配置文件中構建類似的連接(這就是爲什麼我使用$ conn->),但我是告訴我也應該用try/catch包圍每個db查詢。這是不必要的? –

+1

好吧,就像我在這裏發佈的帖子以及我鏈接的那些帖子一樣,要在try/catch中包圍它們的唯一原因是,如果在查詢失敗時你不想做其他事情。例如,如果你想記錄他們在一個特殊的日誌文件或你有什麼。該查詢將失敗或不會失敗......這樣EXCEPTION模式將會處理。 –

+0

只要把它放到上下文中,如果說你想做一個嘗試/抓住,如果它失敗了,你想要一封電子郵件發送給你,那麼是一個嘗試/捕獲將是偉大的...但如果你只是想以檢查查詢是否是一個去,然後讓默認的錯誤處理爲你做的伎倆。 –