PDO 的 fetch 模式功能強大,但參數組合眾多,每次查閱文件都很費時。本文整理常見模式的輸出結構對照,並附上可直接執行的測試程式碼,方便開發者快速選擇最適合的資料結構。
假設資料表 category 有三筆資料:
id | name | method
---|-----------|--------
1 | HBO | service
2 | 本周新片 | movie
3 | 熱映中 | movie
$data = $db->query("SELECT id, name, method FROM category")
->fetchAll(PDO::FETCH_ASSOC);
/*
array(
array('id'=>'1', 'name'=>'HBO', 'method'=>'service'),
array('id'=>'2', 'name'=>'本周新片', 'method'=>'movie'),
array('id'=>'3', 'name'=>'熱映中', 'method'=>'movie')
)
*/
$data = $db->query("SELECT name, method FROM category")
->fetchAll(PDO::FETCH_COLUMN);
/*
array('HBO', '本周新片', '熱映中')
*/
$data = $db->query("SELECT id, name, method FROM category")
->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
/*
array(
'1' => array('name'=>'HBO', 'method'=>'service'),
'2' => array('name'=>'本周新片', 'method'=>'movie'),
'3' => array('name'=>'熱映中', 'method'=>'movie')
)
*/
$data = $db->query("SELECT id, name, method FROM category")
->fetchAll(PDO::FETCH_UNIQUE | PDO::FETCH_COLUMN);
/*
array('1'=>'HBO', '2'=>'本周新片', '3'=>'熱映中')
*/
$data = $db->query("SELECT method, id, name FROM category")
->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_ASSOC);
/*
array(
'service' => array(array('id'=>'1', 'name'=>'HBO')),
'movie' => array(
array('id'=>'2', 'name'=>'本周新片'),
array('id'=>'3', 'name'=>'熱映中')
)
)
*/
$data = $db->query("SELECT id, name, method FROM category")
->fetchAll(PDO::FETCH_OBJ);
/*
array(
stdClass Object (id=>1, name=>HBO, method=>service),
stdClass Object (id=>2, name=>本周新片, method=>movie),
stdClass Object (id=>3, name=>熱映中, method=>movie)
)
*/
class Category {
public $id, $name, $method;
}
$data = $db->query("SELECT id, name, method FROM category")
->fetchAll(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, "Category");
/* 產生 Category 物件陣列,屬性自動對應欄位 */
id => 資料 字典:FETCH_UNIQUE | FETCH_ASSOCFETCH_COLUMNFETCH_GROUP 系列FETCH_OBJ 或 FETCH_CLASS將本文加入書籤,下次查詢 PDO 模式不再東翻西找!