透過 $this->getDoctrine()->getConnection() 取得 Connection 物件,提供多種資料獲取方式。假設資料表 test 有欄位 name, color,資料兩筆:
Tom blue Lily red
$data = $conn->fetchColumn("SELECT name, color FROM test");
// 結果: "Tom" (字串)
僅回傳第一行第一欄的值,適合 COUNT(*)、單值查詢。
$data = $conn->fetchArray("SELECT name, color FROM test");
// 結果: ['Tom', 'blue'] (索引陣列)
回傳第一行所有欄位值的數值索引陣列 (0, 1, 2...)。
$data = $conn->fetchAssoc("SELECT name, color FROM test");
// 結果: ['name' => 'Tom', 'color' => 'blue']
回傳第一行所有欄位值的關聯陣列 (欄位名為鍵)。最常用於單筆記錄查詢。
$data = $conn->fetchAll("SELECT name, color FROM test");
// 結果:
[
['name' => 'Tom', 'color' => 'blue'],
['name' => 'Lily', 'color' => 'red']
]
回傳所有行的關聯陣列巢狀結構。適合列表查詢。
| 方法 | 回傳型別 | 適用場景 |
|---|---|---|
| fetchColumn | scalar | 單一值 (COUNT、SUM、單欄位) |
| fetchArray | array (numeric keys) | 單行、需數值索引 |
| fetchAssoc | array (associative) | 單行、需欄位名存取 |
| fetchAll | array of associative | 多行列表 |
$conn = $this->getDoctrine()->getConnection(); $sql = "SELECT * FROM user WHERE name = :name AND status = :status"; $stmt = $conn->prepare($sql); $stmt->execute(['name' => 'Tom', 'status' => 1]); $user = $stmt->fetchAssoc(); // 或 fetchAll()
參數綁定防止 SQL 注入,複雜查詢必用。
根據查詢預期筆數與資料結構選擇對應方法:單值用 fetchColumn、單行物件用 fetchAssoc、列表用 fetchAll。實務上搭配 QueryBuilder 或 Repository 使用更符合 Symfony 最佳實踐。