Режими на преземање
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Режими на преземање
Референца за `pdo.constants.fetch-modes.php` со подобрена типографија и навигација.
Режими на преземање
Константи за известување за грешки константи на курсорот » PEAR
PDO::FETCH_ORI_* константи на курсорот.
Основни режими на преземање
| Режим на преземање | Резиме |
|---|---|
PDO::FETCH_DEFAULT
|
Специјална вредност за користење на тековниот стандарден режим на преземање. |
PDO::FETCH_ASSOC
|
Низа индексирана само по име на колона. |
PDO::FETCH_BOTH (Стандардно)
|
Низа индексирана и по број и по име на колона. |
PDO::FETCH_NAMED
|
Варијанта на PDO::FETCH_ASSOC што задржува дупликат колони.
|
PDO::FETCH_NUM
|
Низа индексирана само по број на колона. |
PDO::FETCH_COLUMN
|
Една колона. |
PDO::FETCH_KEY_PAIR
|
Парови клуч-вредност, индексирани по првата колона. |
PDO::FETCH_FUNC
|
Користи функција за креирање на вредноста за враќање. (. Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот. само) |
PDO::FETCH_OBJ
|
Анонимен (stdClass) објект. |
PDO::FETCH_CLASS
|
Објект од одредена класа. |
PDO::FETCH_CLASS опции
Овие режими се користат за имплементирање опции при користење
PDO::FETCH_CLASS.
| Режим на преземање | Резиме |
|---|---|
PDO::FETCH_CLASSTYPE
|
Користете ја првата колона како име на класата. |
PDO::FETCH_PROPS_LATE
|
Повикајте го конструкторот пред да ги поставите својствата. |
PDO::FETCH_SERIALIZE
|
Користете PHP серијализирани податоци. Застарено од PHP 8.1.0. |
Режими за еден резултат
Следниве режими не може да се користат со . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
| Режим на преземање | Резиме |
|---|---|
PDO::FETCH_BOUND
|
Поврзете вредности со наведените променливи. |
PDO::FETCH_INTO
|
Ажурирајте постоечки објект. |
PDO::FETCH_LAZY
|
Мрзливо земање преку PDORow за пристап како низа и објект. |
Специјални знаменца за однесување за . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот.
Следниве специјални режими за повеќе резултати работат само со . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот. и не работат со некои други режими за земање. Проверете ја целосната документација за детали.
| Режим на преземање | Резиме |
|---|---|
PDO::FETCH_GROUP
|
Резултатите се групирани по првата колона. |
PDO::FETCH_UNIQUE
|
Резултатите се (уникатно) индексирани по првата колона. |
Ракување со дупликат имиња на колони
Можно е резултатите да содржат повеќе колони што користат исто име. На пример, при спојување на 2 табели што и двете содржат колона со исто име.
Бидејќи PHP структурите како што се низи и објекти не поддржуваат повеќе клучеви или својства што користат исто име, вратената низа или објект ќе содржи само 1 од вредностите што го користат истото име.
Која вредност ќе се врати за дадено дупликатно име треба да се смета за недефинирана.
За да се избегне овој проблем, експлицитно именувајте ги колоните користејќи алијас. На пример:
SELECT table1.created_at AS t1_created_at,
table2.created_at AS t2_created_at
FROM table1
JOIN table2 ON table1.table2id = table2.id
Види исто така PDO::FETCH_NAMED,
PDO::ATTR_FETCH_TABLE_NAMES and
PDO::ATTR_FETCH_CATALOG_NAMES.
Поставување на стандарден режим на преземање
Можно е да се постави стандарден режим на преземање за сите прашања користејќи
PDO::ATTR_DEFAULT_FETCH_MODE with
Пример #1 Креирајте PDO инстанца и поставете го режимот за грешки or
Имајте предвид дека атрибутите специфични за драјверот.
Стандардниот режим на преземање за одредена изјава може да се постави со користење на
Следниот пример покажува како. Ова влијае на повторното користење како подготвена изјава и итерација (користејќи
foreach).
PDOStatement::setAttribute() не може да се користи за поставување на стандардниот режим на преземање. Прифаќа само атрибути специфични за драјверот и тивко ги игнорира атрибутите што не се препознаени.
PDO::FETCH_DEFAULT (int)
Достапно од PHP 8.0.7.
Ова е специјална вредност што го користи тековниот стандарден режим на преземање за
PDOStatement. Особено е корисно како стандардна вредност за параметрите на методите при проширување
PDOStatement за употреба со
PDO::ATTR_STATEMENT_CLASS.
Оваа вредност не може да се користи со
PDO::ATTR_DEFAULT_FETCH_MODE.
PDO::FETCH_ASSOC (int)
PDO::FETCH_ASSOC враќа низа индексирана само по име на колона.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_ASSOC);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
PDO::FETCH_BOTH (int)
Ова е стандардниот режим на преземање.
PDO::FETCH_BOTH враќа низа индексирана и по број на колона и по име. Ова значи дека секоја вратена вредност се дуплира за секој ред од резултатот.
The column number starts at 0 and is determined by the result column order in the query, not (for example) the order columns are defined in the table.
Забелешка: Бројот на колоната започнува од 0 и се одредува според редоследот на колоните во резултатот од прашањето, а не (на пример) според редоследот на колоните дефинирани во табелата.
SELECT *.
Забелешка: Не се препорачува користење на нумерички индекс на колона бидејќи ова може да се промени кога ќе се промени прашањето, или кога ќе се промени шемата на табелата кога се користи
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_BOTH);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[id] => 104,
[0] => 104,
[name] => Chris,
[1] => Chris,
[country] => Ukraine,
[2] => Ukraine
)
Бројот на записи индексирани по име може да не се совпаѓа со бројот на записи индексирани по број во случаи кога повеќе вратени колони користат исто име.int)
PDO::FETCH_NAMED PDO::FETCH_NAMED (
PDO::FETCH_ASSOC враќа резултати во истиот формат како
освен што каде што повеќе колони користат исто име, сите вредности се враќаат како листа. За повеќе информации за ракување со дупликат имиња на колони и алтернативи, видете го above.
делот за ракување со дупликат имиња
<?php
$stmt = $pdo->query(
"SELECT users.*, referrer.name
FROM users
LEFT JOIN users AS referrer ON users.referred_by = referrer.userid
WHERE userid = 109"
);
$row = $stmt->fetch(\PDO::FETCH_NUM);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[userid] => 109
[name] => Array
(
[0] => Toni
[1] => Chris
)
[country] => Germany
[referred_by] = 104
)
Редоследот по кој се враќаат дупликат вредности треба да се смета за недефиниран. Нема начин да се знае од каде доаѓа секоја вредност.int)
PDO::FETCH_NUM PDO::FETCH_NUM (
Забелешка: Бројот на колоната започнува од 0 и се одредува според редоследот на колоните во резултатот од прашањето, а не (на пример) според редоследот на колоните дефинирани во табелата.
SELECT *.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_NUM);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[0] => 104
[1] => Chris
[2] => Ukraine
)
враќа низа индексирана само по број на колона. Бројот на колоната започнува од 0 и се одредува според редоследот на колоните во резултатот од прашањето, а не (на пример) според редоследот на колоните дефинирани во табелата.int)
PDO::FETCH_COLUMN PDO::FETCH_COLUMN ( Следниот пример покажува како
or . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот. враќа вредности од една колона. Користете го вториот аргумент за
да се специфицира која колона се враќа. ValueError ќе биде фрлена.
<?php
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_COLUMN);
print_r($row);
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_COLUMN, 1);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[0] => Chris
[1] => Jamie
[2] => Robin
)
Array
(
[0] => Ukraine
[1] => England
[2] => Germany
)
Ако наведената колона не постои,int)
PDO::FETCH_KEY_PAIR PDO::FETCH_KEY_PAIR ( . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
Забелешка: враќа парови вредности, индексирани од првата колона. Резултатите мора да содржат само 2 колони. Овој режим на преземање има смисла само со
<?php
$stmt = $pdo->query("SELECT name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_KEY_PAIR);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[Chris] => Ukraine
[Jamie] => England
[Robin] => Germany
)
Ако првата колона не е единствена, вредностите ќе бидат изгубени. Кои вредности ќе бидат изгубени треба да се сметаат за недефинирани.int)
PDO::FETCH_FUNC ( . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
The function receives the values as parameters. There's no way to retrieve the column name a given value was associated with. It is crucial to ensure that the column order in the query matches the order of parameters of the function.
Забелешка: Функцијата ги прима вредностите како параметри. Нема начин да се добие името на колоната со која е поврзана дадена вредност. Од клучно значење е да се осигурате дека редоследот на колоните во прашањето одговара на редоследот на параметрите на функцијата.
PDO::FETCH_GROUPandPDO::FETCH_UNIQUEЕфектите од
<?php
function valueCreator($col1, $col2, $col3)
{
return [
'col1' => $col1,
'col2' => strtoupper($col2),
'col3' => $col3,
'customKey' => 'customValue',
];
}
$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_FUNC, valueCreator(...));
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[0] => Array
(
[col1] => 104
[col2] => SAM
[col3] => Ukraine
[customKey] => customValue
)
[1] => Array
(
[col1] => 105
[col2] => JAMIE
[col3] => England
[customKey] => customValue
)
[2] => Array
(
[col1] => 107
[col2] => ROBIN
[col3] => Germany
[customKey] => customValue
)
)
се применуваат на резултатите пред да се повика функцијата.int)
PDO::FETCH_OBJ враќа stdClass
object.
Види исто така PDO::FETCH_OBJ ( and
PDO::FETCH_CLASS.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users");
$row = $stmt->fetch(\PDO::FETCH_OBJ);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
stdClass Object
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
PDOStatement::fetchObject()int)
PDO::FETCH_CLASS ( Враќа објект од одредена класа. За дополнителни однесувања видете ги.
знаменцата за опции
Види исто така PDO::FETCH_OBJ (.
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Горниот пример ќе прикаже нешто слично на:
Constructor called with 0 args
Properties set when constructor called? Yes
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Ако не постои својство со името на вратена колона, тоа ќе биде динамички декларирано. Ова однесување е застарено и ќе предизвика грешка од PHP 9.0.int)
PDO::FETCH_CLASSTYPE (
PDO::FETCH_CLASS (и
Овој режим на преземање може да се користи само во комбинација со).
неговите други опции
Кога се користи овој режим на преземање, PDO ќе ја користи првата вратена колона како име на класата што треба да се врати. stdClass Ако наведената класа не може да се најде, ќе се врати
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT 'TestEntity', userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE);
$result = $stmt->fetch();
var_dump($result);Горниот пример ќе прикаже нешто слично на:
Constructor called with 0 args
Properties set when constructor called? Yes
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
објект, без предупредување или грешка.int)
PDO::FETCH_CLASSTYPE (
PDO::FETCH_CLASS (и
Овој режим на преземање може да се користи само во комбинација со).
PDO::FETCH_PROPS_LATE (
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with ". count(func_get_args()) ." args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
}
$stmt = $db->query(
"SELECT userid, name, country, referred_by_userid FROM users"
);
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_PROPS_LATE, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Горниот пример ќе прикаже нешто слично на:
Constructor called with 0 args
Properties set when constructor called? No
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
Кога се користи овој режим на преземање, конструкторот ќе биде повикан пред да се постават својствата.int)
Претходната порака за грешка DEPRECATED PDO::FETCH_SERIALIZE (
PDO::FETCH_CLASSTYPE (
PDO::FETCH_CLASS (и
Овој режим на преземање може да се користи само во комбинација со).
од PHP 8.1.0. Силно се обесхрабрува потпирањето на оваа функција. Countable.
This feature does not support a string that contains a complete serialized object (with serialize()).
Оваа функција не поддржува стринг што содржи целосно серијализиран објект (со
<?php
class TestEntity implements Serializable
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
public function __construct()
{
print "Constructor called with " . count(func_get_args()) . " args\n";
print "Properties set when constructor called? "
. (isset($this->name) ? 'Yes' : 'No') . "\n";
}
public function serialize()
{
return join(
"|",
[$this->userid, $this->name, $this->country, $this->referred_by_userid]
);
}
public function unserialize(string $data)
{
$parts = explode("|", $data);
$this->userid = (int) $parts[0];
$this->name = $parts[1];
$this->country = $parts[2];
$refId = $parts[3];
$this->referred_by_userid = ($refId === "" ? null : (int) $refId);
}
}
print "Set up record (constructor called manually):\n";
$db->exec(
"CREATE TABLE serialize (
sdata TEXT
)"
);
$origObj = new TestEntity();
$origObj->userid = 200;
$origObj->name = 'Seri';
$origObj->country = 'Syria';
$origObj->referred_by_userid = null;
$insert = $db->prepare("INSERT INTO serialize (sdata) VALUES (:sdata)");
$insert->execute(['sdata' => $origObj->serialize()]);
print "\nRetrieve result:\n";
$query = "SELECT sdata FROM serialize";
$stmt = $db->query($query);
// NOTE: Constructor is never called!
$stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_SERIALIZE, TestEntity::class);
$result = $stmt->fetch();
var_dump($result);Горниот пример ќе прикаже нешто слично на:
Deprecated: TestEntity implements the Serializable interface, which is deprecated. Implement __serialize() and __unserialize() instead (or in addition, if support for old PHP versions is necessary) in Standard input code on line 2
Set up record (constructor called manually):
Constructor called with 0 args
Properties set when constructor called? No
Retrieve result:
Deprecated: PDOStatement::setFetchMode(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 58
Deprecated: PDOStatement::fetch(): The PDO::FETCH_SERIALIZE mode is deprecated in Standard input code on line 59
object(TestEntity)#5 (4) {
["userid"]=>
int(200)
["name"]=>
string(4) "Seri"
["country"]=>
string(5) "Syria"
["referred_by_userid"]=>
NULL
}
Овој режим на преземање не го повикува конструкторот.int)
PDO::FETCH_BOUND ( . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
Овој режим на преземање не може да се користи со и ги доделува вредностите на колоните во вашето множество резултати на PHP променливите на кои биле поврзани соОвој режим на преземање не враќа директно резултат, туку ги врзува вредностите со променливи наведени со true.
Забелешка: . Преземениот метод за преземање враќа
<?php
$query = "SELECT users.userid, users.name, users.country, referrer.name
FROM users
LEFT JOIN users AS referrer ON users.referred_by_userid = referrer.userid";
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bindColumn('userid', $userId);
$stmt->bindColumn('name', $name);
$stmt->bindColumn('country', $country);
// Bind by column position to resolve duplicated column name
// To avoid this breaking if the query is changed, use an SQL alias instead
// For example: referrer.name AS referrer_name
$stmt->bindColumn(4, $referrerName);
while ($stmt->fetch(\PDO::FETCH_BOUND)) {
print join("\t", [$userId, $name, $country, ($referrerName ?? 'NULL')]) . "\n";
}Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
104 Chris Ukraine NULL 105 Jamie England NULL 107 Robin Germany Chris 108 Sean Ukraine NULL 109 Toni Germany NULL 110 Toni Germany NULL
Кога се користат подготвени изјави, за да работат правилно, променливите мора да бидат врзани по извршувањето на прашањето.int)
PDO::FETCH_BOUND ( . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
PDO::FETCH_INTO (
знаменцата за опции
Овој режим на преземање ги ажурира својствата во наведениот објект. Објектот се враќа при успех. public Својствата мора да бидат
readonly.
и не може да бидат Следниот пример покажува како Нема начин да се промени објектот што треба да се ажурира без да се користи
<?php
class TestEntity
{
public $userid;
public $name;
public $country;
public $referred_by_userid;
}
$obj = new TestEntity();
$stmt->setFetchMode(\PDO::FETCH_INTO, $obj);
$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users");
$result = $stmt->fetch();
var_dump($result);Горниот пример ќе прикаже нешто слично на:
object(TestEntity)#3 (4) {
["userid"]=>
int(104)
["name"]=>
string(5) "Chris"
["country"]=>
string(7) "Ukraine"
["referred_by_userid"]=>
NULL
}
помеѓу преземањето на секој запис.int)
PDO::FETCH_BOUND ( . Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
PDO::FETCH_LAZY ( PDORow Овој режим на преземање враќа
PDO::FETCH_BOTH and
PDO::FETCH_OBJобјект што обезбедува пристап до вредностите како низа и како објект (т.е. ги комбинира однесувањата на
), преземени на мрзлив начин.
PDORow ќе врати NULL Ова може да обезбеди ефикасен пристап до меморијата (од страната на PHP) до резултати без баферирање на серверот на базата на податоци. Дали PDO користи баферирање од страната на клиентот за резултати зависи од специфичниот драјвер на базата на податоци што се користи (и неговата конфигурација).
Вратениот PDORow без никаква грешка или предупредување при пристап до својства или клучеви што не се дефинирани. Ова може да ги направи грешките како што се печатни грешки или прашања што не враќаат очекувани податоци потешки за откривање и отстранување грешки.
<?php
$stmt = $db->query("SELECT userid, name, country, referred_by_userid FROM users");
$result = $stmt->fetch(\PDO::FETCH_LAZY);
print "ID: ". $result[0] ."\n";
print "Name: {$result->name}\n";
print "Country: " . $result['country'] ."\n";
// Returns NULL. No warning or error is raised.
print "Does not exist: " . var_export($result->does_not_exist, true) . "\n";
$differentResult = $stmt->fetch(\PDO::FETCH_LAZY);
// The previously retrieved PDORow now points to the newly retrieved result
print "ID: ". $result[0] ."\n";Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
ID: 104 Name: Chris Country: Ukraine Does not exist: NULL ID: 105
PDO::FETCH_GROUP (int)
PDO::FETCH_GROUP враќа списоци од асоцијативни низи, индексирани по (неуникатна) колона. Овој режим на преземање работи само со
. Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
Кога е комбинирано со PDO::FETCH_UNIQUE, двата режими ќе ја користат истата колона, правејќи ја комбинацијата од овие режими бескорисна.
Ова преземање треба да се комбинира со едно од
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN or
PDO::FETCH_FUNC.
Ако не е даден режим на преземање од горната листа, тековниот стандарден режим на преземање за PDOStatement ќе се користи.
<?php
$stmt = $pdo->query("SELECT country, userid, name FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[Ukraine] => Array
(
[0] => Array
(
[userid] => 104
[name] => Chris
)
[1] => Array
(
[userid] => 108
[name] => Sean
)
)
[England] => Array
(
[0] => Array
(
[userid] => 105
[name] => Jamie
)
)
[Germany] => Array
(
[0] => Array
(
[userid] => 107
[name] => Robin
)
[1] => Array
(
[userid] => 109
[name] => Toni
)
)
)
Во горниот пример треба да се забележи дека првата колона е изоставена од низата за секој ред, достапна само како клуч. Таа може да се вклучи со повторување на колоната, како во следниот пример:
<?php
$stmt = $pdo->query("SELECT country, userid, name, country FROM users");
$row = $stmt->fetchAll(\PDO::FETCH_GROUP | \PDO::FETCH_ASSOC);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[Ukraine] => Array
(
[0] => Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
[1] => Array
(
[userid] => 108
[name] => Sean
[country] => Ukraine
)
)
[England] => Array
(
[0] => Array
(
[userid] => 105
[name] => Jamie
[country] => England
)
)
[Germany] => Array
(
[0] => Array
(
[userid] => 107
[name] => Robin
[country] => Germany
)
[1] => Array
(
[userid] => 109
[name] => Toni
[country] => Germany
)
)
)
PDO::FETCH_UNIQUE (int)
PDO::FETCH_UNIQUE ја користи првата колона за индексирање на записи, враќајќи 1 запис по вредност на индекс. Овој режим на преземање работи само со
. Враќа резултати од повикување на назначената функција, користејќи ги колоните на секој ред како параметри во повикот..
Кога е комбинирано со PDO::FETCH_GROUP, двата режими ќе ја користат истата колона, правејќи ја комбинацијата од овие режими бескорисна.
Ова преземање треба да се комбинира со едно од
PDO::FETCH_ASSOC, PDO::FETCH_BOTH,
PDO::FETCH_NAMED, PDO::FETCH_NUM,
PDO::FETCH_COLUMN or
PDO::FETCH_FUNC.
Ако не е даден режим на преземање од горната листа, тековниот стандарден режим на преземање за PDOStatement ќе се користи.
Кога се користи со колона за која е познато дека е уникатна (како ID на запис), овој режим обезбедува можност за брзо враќање на резултатите индексирани по таа вредност.
Забелешка: враќа парови вредности, индексирани од првата колона. Резултатите мора да содржат само 2 колони. Овој режим на преземање има смисла само со
Филтрирањето на записи треба да се врши во SQL каде што е можно. Базата на податоци ќе користи индекси за оптимизирање на овој процес и враќање само на потребните записи. Изборот на повеќе записи од потребното од базата на податоци може значително да го зголеми користењето на меморијата и времето на барање за поголеми множества на резултати.
<?php
$stmt = $pdo->query("SELECT userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[104] => Array
(
[name] => Chris
[country] => Ukraine
)
[105] => Array
(
[name] => Jamie
[country] => England
)
[107] => Array
(
[name] => Robin
[country] => Germany
)
)
Во горниот пример треба да се забележи дека првата колона е изоставена од низата за секој ред, достапна само како клуч. Таа може да се вклучи со повторување на колоната, како во следниот пример:
<?php
$stmt = $pdo->query("SELECT userid, userid, name, country FROM users LIMIT 3");
$row = $stmt->fetchAll(\PDO::FETCH_UNIQUE | \PDO::FETCH_ASSOC);
print_r($row);Пример #1 Пример што покажува затворачка ознака што го опфаќа последниот нов ред
Array
(
[104] => Array
(
[userid] => 104
[name] => Chris
[country] => Ukraine
)
[105] => Array
(
[userid] => 105
[name] => Jamie
[country] => England
)
[107] => Array
(
[userid] => 107
[name] => Robin
[country] => Germany
)
)