PDOStatement::fetchAll — ส่งคืนอาร์เรย์ที่มีแถวทั้งหมดในชุดผลลัพธ์ (PHP 5 >= 5.1.0, PECL pdo >= 0.1.0)
array PDOStatement::fetchAll ([ int $fetch_style [, ผสม $fetch_argument [, array $ctor_args = array() ]]] )
fetch_style
ควบคุมวิธีการส่งคืนบรรทัดถัดไปไปยังผู้โทร ค่านี้จะต้องเป็นหนึ่งในชุดค่าคงที่ PDO::FETCH_* และค่าเริ่มต้นคือค่าของ PDO::ATTR_DEFAULT_FETCH_MODE (ค่าเริ่มต้นคือ PDO::FETCH_BOTH)
หากต้องการส่งคืนอาร์เรย์ที่มีค่าทั้งหมดของคอลัมน์เดียวในชุดผลลัพธ์ ให้ระบุ PDO::FETCH_COLUMN รับคอลัมน์ที่ต้องการโดยระบุพารามิเตอร์ดัชนีคอลัมน์
หากต้องการรับค่าเฉพาะของคอลัมน์เดียวในชุดผลลัพธ์ คุณต้องเป็นค่าบิตหรือ PDO::FETCH_COLUMN และ PDO::FETCH_UNIQUE
หากต้องการส่งคืนอาเรย์แบบเชื่อมโยงที่มีค่าที่จัดกลุ่มตามคอลัมน์ที่ระบุ คุณจะต้องเป็นบิตหรือ PDO::FETCH_COLUMN และ PDO::FETCH_GROUP
fetch_argument พารามิเตอร์นี้มีความหมายที่แตกต่างกัน ขึ้นอยู่กับค่าของพารามิเตอร์ fetch_style:
PDO::FETCH_COLUMN
: ส่งคืนคอลัมน์ที่ระบุซึ่งจัดทำดัชนีเริ่มต้นจาก 0
PDO::FETCH_CLASS
: ส่งคืนอินสแตนซ์ของคลาสที่ระบุ โดยแมปคอลัมน์ของแต่ละแถวกับชื่อแอตทริบิวต์ที่สอดคล้องกันในคลาส
PDO::FETCH_FUNC
: ส่งคอลัมน์ของแต่ละแถวเป็นพารามิเตอร์ไปยังฟังก์ชันที่ระบุ และส่งคืนผลลัพธ์หลังจากเรียกใช้ฟังก์ชัน
ctor_args เมื่อพารามิเตอร์ fetch_style เป็น PDO::FETCH_CLASS พารามิเตอร์ของตัวสร้างของคลาสที่กำหนดเอง
PDOStatement::fetchAll() ส่งคืนอาร์เรย์ที่มีแถวที่เหลือทั้งหมดในชุดผลลัพธ์ แต่ละแถวของอาร์เรย์นี้เป็นอาร์เรย์ของค่าคอลัมน์หรือวัตถุที่มีคุณสมบัติสอดคล้องกับชื่อคอลัมน์แต่ละคอลัมน์
การใช้วิธีนี้เพื่อให้ได้ชุดผลลัพธ์ขนาดใหญ่จะทำให้ระบบมีภาระหนักและอาจใช้ทรัพยากรเครือข่ายจำนวนมาก แทนที่จะดึงข้อมูลทั้งหมดแล้วใช้งานด้วย PHP ให้พิจารณาใช้บริการฐานข้อมูลเพื่อประมวลผลชุดผลลัพธ์ ตัวอย่างเช่น ใช้ส่วนคำสั่ง WHERE และ ORDER BY ใน SQL เพื่อรับรองผลลัพธ์ก่อนที่จะดึงข้อมูลและประมวลผลผ่าน PHP
<?php$sth = $dbh->prepare("เลือกชื่อ, สีจากผลไม้");$sth->execute();/* รับแถวที่เหลือทั้งหมดในชุดผลลัพธ์*/print("ดึงข้อมูลทั้งหมด แถวที่เหลือในชุดผลลัพธ์:n");$result = $sth->fetchAll();print_r($result);?>
ผลลัพธ์ของตัวอย่างข้างต้นคือ:
ดึงแถวที่เหลือทั้งหมดในชุดผลลัพธ์:Array( [0] => Array ( [NAME] => pear [0] => pear [COLOUR] => green [1] => green ) [1] => อาร์เรย์ ( [NAME] => แตงโม [0] => แตงโม [COLOUR] => สีชมพู [1] => สีชมพู ))
ตัวอย่างต่อไปนี้สาธิตวิธีการส่งคืนค่าทั้งหมดของคอลัมน์เดียวจากชุดผลลัพธ์ แม้ว่าคำสั่ง SQL เองอาจส่งคืนหลายคอลัมน์ต่อแถวก็ตาม
<?php$sth = $dbh->prepare("SELECT name, color FROM Fruit");$sth->execute();/* รับค่าทั้งหมดในคอลัมน์แรก*/$result = $sth-> fetchAll(PDO ::FETCH_COLUMN, 0);var_dump($ผลลัพธ์);?>
ผลลัพธ์ของตัวอย่างข้างต้นคือ:
Array(3)( [0] => string(5) => apple [1] => string(4) => pear [2] => string(10) => แตงโม)
ตัวอย่างต่อไปนี้สาธิตวิธีการส่งคืนอาเรย์ที่เชื่อมโยงซึ่งจัดกลุ่มตามค่าของคอลัมน์ที่ระบุในชุดผลลัพธ์ อาร์เรย์ประกอบด้วยสามคีย์: อาร์เรย์แอปเปิ้ลและลูกแพร์ที่ส่งคืนจะมีสีที่แตกต่างกันสองสี ในขณะที่อาร์เรย์แตงโมที่ส่งคืนมีเพียงสีเดียว
<?php$insert = $dbh->prepare("INSERT INTO ผลไม้(ชื่อ, สี) ค่า (?, ?)");$insert->execute(array('apple', 'green'));$insert ->execute(array('pear', 'yellow'));$sth = $dbh->prepare("เลือกชื่อ, สีจาก ผลไม้");$sth->execute();/* จัดกลุ่มตามคอลัมน์แรก*/var_dump($sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP));?>
ผลลัพธ์ของตัวอย่างข้างต้นคือ:
array(3) { ["apple"]=> array(2) { [0]=> string(5) "green" [1]=> string(3) "red" } ["pear"]=> array (2) { [0]=> สตริง (5) "สีเขียว" [1]=> สตริง (6) "สีเหลือง" } ["แตงโม"]=> อาร์เรย์ (1) { [0]=> สตริง (5) "สีเขียว" }}
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงพฤติกรรมของรูปแบบการเข้าซื้อกิจการ PDO::FETCH_CLASS
<?phpclass Fruit { public $name; public $color;}$sth = $dbh->prepare("เลือกชื่อ, สีจากผลไม้");$sth->execute();$result = $sth->fetchAll( PDO::FETCH_CLASS, "ผลไม้");var_dump($ผล);?>
ผลลัพธ์ของตัวอย่างข้างต้นคือ:
array(3) { [0]=> object(fruit)#1 (2) { ["ชื่อ"]=> string(5) "apple" ["สี"]=> string(5) "green" } [ 1]=> วัตถุ (ผลไม้)#2 (2) { ["ชื่อ"]=> สตริง (4) "ลูกแพร์" ["สี"]=> สตริง (6) "สีเหลือง" } [2]=> วัตถุ ( ผลไม้)#3 (2) { ["name"]=> string(10) "watermelon" ["color"]=> string(4) "pink" }}
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงลักษณะการทำงานของ PDO::FETCH_FUNC รับสไตล์
<?phpfunction fruit($name, $color) { return "{$name}: {$color}";}$sth = $dbh->prepare("เลือกชื่อ, สีจากผลไม้");$sth->ดำเนินการ ();$result = $sth->fetchAll(PDO::FETCH_FUNC, "fruit");var_dump($result);?>
ผลลัพธ์ของตัวอย่างข้างต้นคือ:
array(3) { [0]=> string(12) "apple: green" [1]=> string(12) "pear: yellow" [2]=> string(16) "watermelon: pink"}