Արդյունքների հավաքածուներ
Select հարցումը միշտ վերադարձնում է արդյունքների հավաքածուի օբյեկտ, որը պարունակում է զրո կամ ավելի գրառումներ։ Կան մի քանի եղանակներ տվյալները ստանալու համար՝ կախված օգտագործման սցենարից։ Գրառումները ըստ լռության դուրս են բերվում որպես օբյեկտներ, եթե չեք փոխել դուրսբերման ռեժիմը (տես՝ setFetchMode)
Հաճախ օգտագործվող դեպքն է արդյունքների հավաքածուի շրջանցումը foreach() ցիկլի միջոցով։
// Սթատիկ հարցում: $result = $connection->query("SELECT field1, field2 FROM {mytable}"); foreach ($result as $record) { // Ամեն գրառման հետ անել ինչ-որ բան } // Դինամիկ հարցում $result = $query->execute(); foreach ($result as $record) { // Ամեն գրառման հետ անել ինչ-որ բան }
Բայց, կախված արդյունքներից օգտվելուց, կան նաև այլ տարբերակներ գրառումներ ստանալու համար։
Հստակ հաջորդ գրառումը ստանալու համար օգտագործեք՝
$record = $result->fetch(); // Օգտագործել լռության դուրսբերման ռեժիմը։ $record = $result->fetchObject(); // Հանել որպես stdClass օբյեկտ։ $record = $result->fetchAssoc(); // Հանել որպես ասոցատիվ զանգված։
Եթե հաջորդ գրառում չկա, վերադարձվում է FALSE։ Սովորաբար ավելի լավ է օգտագործել fetchObject() կամ fetchAssoc(), քանի որ դրանք ավելի ինֆորմատիվ են։ Եթե հարկավոր է օգտագործել PDO-ի ցանկացած այլ դուրսբերման ռեժիմ, օգտագործեք fetch()։
Միայն մեկ դաշտ ստանալու համար օգտագործեք՝
$record = $result->fetchField($column_index);
Ընդհանրապես $column_index-ի լռության արժեքը 0 է՝ առաջին դաշտը։
DELETE, INSERT կամ UPDATE օպերատորների կողմից վերադարձված տողերի քանակը հաշվելու համար օգտագործեք՝
$number_of_rows = $result->rowCount();
SELECT օպերատորի կողմից վերադարձված տողերի քանակը հաշվելու համար օգտագործեք՝
$number_of_rows = $connection->select('mytable')->countQuery()->execute()->fetchField();
Բոլոր գրառումները միանգամից զանգվածով ստանալու համար օգտագործեք որևէ մեկը՝
// Ստանալ բոլոր գրառումները stdClass օբյեկտների ինդեքսավորված զանգվածում։ $result->fetchAll(); // Ստանալ բոլոր գրառումները ասոցատիվ զանգվածով, որտեղ բանալին նշված դաշտն է։ $result->fetchAllAssoc($field); // Ստանալ 2-սյունակների արդյունք որպես ասոցատիվ զանգված՝ դաշտ 0 => դաշտ 1։ $result->fetchAllKeyed(); // Կարելի է նշել նաև, թե որ երկու դաշտերն օգտագործել՝ նշելով սյունակի համարը. $result->fetchAllKeyed(0,2); // դաշտ 0 => դաշտ 2 $result->fetchAllKeyed(1,0); // դաշտ 1 => դաշտ 0 // Եթե հարկավոր է զանգված, որտեղ բանալին և արժեքը նույն դաշտն են (օրինակ՝ 'checkboxes' ֆորմայի տարր ստեղծելու համար), կարելի է անել. $result->fetchAllKeyed(0,0); // դաշտ 0 => դաշտ 0, օրինակ՝ [article] => [article] // Ստանալ 1-սյունակների արդյունք որպես մեկ զանգված։ $result->fetchCol(); // Կարելի է նշել սյունակի համարը, լռությամբ՝ առաջին սյունակը $result->fetchCol($column_index);
Նշեք, որ fetchAll() և fetchAllAssoc() լռությամբ դուրս կբերեն տվյալներ ըստ հարցման մեջ սահմանված դուրսբերման ռեժիմի (թվային զանգված, ասոցատիվ զանգված կամ օբյեկտ): Սա կարելի է փոխել՝ փոխանցելով նոր ռեժիմի կոնստանտ: fetchAll()-ի համար դա առաջին պարամետնն է, fetchAllAssoc()-ի համար՝ երկրորդը: Օրինակներ՝
// Ստանալ զանգված՝ ասոցատիվ զանգվածներով, բանալին 'id' դաշտն է։ $result->fetchAllAssoc('id', PDO::FETCH_ASSOC); // Ստանալ զանգված՝ թե՛ թվային, թե՛ ասոցատիվ բանալիներով։ $result->fetchAll(PDO::FETCH_BOTH);
Քանի որ PHP-ն աջակցում է մեթոդների շղթայական կանչերը՝ հաճախ $result փոփոխականն ամբողջովին բաց է թողնվում, օրինակ՝
// Ստանալ ասոցատիվ զանգված՝ id-երից դեպի title-եր։ $examples = $connection->query("SELECT id, title FROM {mytable}")->fetchAllKeyed(); // Ստանալ մեկ գրառում տվյալների բազայից։ $myobj = $connection->query("SELECT * FROM {mytable} WHERE example = :example", [':example' => $example])->fetchObject(); // Ստանալ մեկ արժեք տվյալների բազայից։ $myval = $connection->query("SELECT example FROM {mytable} WHERE id = :id", [':id' => $id])->fetchField();
Եթե ձեզ անհրաժեշտ է պարզ զանգված, օրինակ՝ [1, 2, 3, 4, 5], պետք է համաձայնեք նման բանքի՝ [1=>1, 2=>2, 3=>3, 4=>4, 5=>5]: Կարելի է ստանալ հետևյալ կերպ՝
$ids = $connection->query("SELECT id FROM {example}")->fetchAllKeyed(0,0);
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.