首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Symfony Doctrine 資料庫查詢結果獲取方法對比:fetchColumn、fetchArray、fetchAssoc、fetchAll

     編輯:PHP 相關知識

Doctrine DBAL Connection 查詢結果方法速查

透過 $this->getDoctrine()->getConnection() 取得 Connection 物件,提供多種資料獲取方式。假設資料表 test 有欄位 name, color,資料兩筆:

Tom  blue
Lily red

1. fetchColumn() - 取得第一欄第一列

$data = $conn->fetchColumn("SELECT name, color FROM test");
// 結果: "Tom" (字串)

僅回傳第一行第一欄的值,適合 COUNT(*)、單值查詢。

2. fetchArray() - 取得第一列數值陣列

$data = $conn->fetchArray("SELECT name, color FROM test");
// 結果: ['Tom', 'blue'] (索引陣列)

回傳第一行所有欄位值的數值索引陣列 (0, 1, 2...)。

3. fetchAssoc() - 取得第一列關聯陣列

$data = $conn->fetchAssoc("SELECT name, color FROM test");
// 結果: ['name' => 'Tom', 'color' => 'blue']

回傳第一行所有欄位值的關聯陣列 (欄位名為鍵)。最常用於單筆記錄查詢。

4. fetchAll() - 取得所有列關聯陣列

$data = $conn->fetchAll("SELECT name, color FROM test");
// 結果:
[
    ['name' => 'Tom', 'color' => 'blue'],
    ['name' => 'Lily', 'color' => 'red']
]

回傳所有行的關聯陣列巢狀結構。適合列表查詢。

方法選擇指南

方法回傳型別適用場景
fetchColumnscalar單一值 (COUNT、SUM、單欄位)
fetchArrayarray (numeric keys)單行、需數值索引
fetchAssocarray (associative)單行、需欄位名存取
fetchAllarray of associative多行列表

進階:Prepared Statements 與參數綁定

$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 最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved