PDOStatement::fetch()

Från Wiki.linux.se
Version från den 23 december 2024 kl. 07.56 av Admin (diskussion | bidrag) (→‎Se även)
(skillnad) ← Äldre version | Nuvarande version (skillnad) | Nyare version → (skillnad)
Hoppa till navigering Hoppa till sök

PDOStatement::fetch

(PHP 5 >= 5.1.0, PHP 7, PHP 8, PECL pdo >= 0.1.0)

PDOStatement::fetch — Hämtar nästa rad från en resultatuppsättning

Beskrivning

public PDOStatement::fetch(

   int $mode = PDO::FETCH_DEFAULT,
   int $cursorOrientation = PDO::FETCH_ORI_NEXT,
   int $cursorOffset = 0

): mixed

Hämtar en rad från en resultatuppsättning som är kopplad till ett PDOStatement-objekt. Parametern mode avgör hur PDO returnerar raden.

Parametrar

mode
Styr hur nästa rad returneras. Det här värdet måste vara en av PDO::FETCH_*-konstanterna. Som standard används värdet för PDO::ATTR_DEFAULT_FETCH_MODE (som i sin tur standardmässigt är PDO::FETCH_BOTH).
  • PDO::FETCH_ASSOC: Returnerar en array indexerad av kolumnnamn så som de återfinns i resultatuppsättningen.
  • PDO::FETCH_BOTH (standard): Returnerar en array indexerad både av kolumnnamn och 0-baserade kolumnnummer.
  • PDO::FETCH_BOUND: Returnerar true och tilldelar värdena i resultatuppsättningen till de PHP-variabler som bundits med PDOStatement::bindColumn.
  • PDO::FETCH_CLASS: Returnerar en ny instans av den begärda klassen. Kolumnvärdena mappas till egenskaper i klassen. Efter att egenskaperna satts anropas konstruktorn, om inte även PDO::FETCH_PROPS_LATE används. Om du inkluderar PDO::FETCH_CLASSTYPE (t.ex. PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE) så bestäms klassens namn från värdet i den första kolumnen.
  • PDO::FETCH_INTO: Uppdaterar en befintlig instans av den begärda klassen, där kolumnvärdena mappas till namngivna egenskaper.
  • PDO::FETCH_LAZY: En kombination av PDO::FETCH_BOTH och PDO::FETCH_OBJ, som returnerar ett PDORow-objekt och skapar egenskaper efter kolumnnamn vid åtkomst.
  • PDO::FETCH_NAMED: Returnerar en array på samma sätt som PDO::FETCH_ASSOC, men om det finns flera kolumner med samma namn så blir värdet för den nyckeln en array med samtliga värden i de kolumnerna.
  • PDO::FETCH_NUM: Returnerar en array indexerad efter kolumnnummer, med start på 0.
  • PDO::FETCH_OBJ: Returnerar ett anonymt objekt med egenskaper som motsvarar kolumnnamn.
  • PDO::FETCH_PROPS_LATE: Används tillsammans med PDO::FETCH_CLASS för att konstruktorn ska anropas innan egenskaperna tilldelas sina värden.
cursorOrientation
För ett PDOStatement-objekt som representerar en ”scrollable cursor” anger detta värde vilken rad som ska returneras. Detta värde måste vara en av PDO::FETCH_ORI_*-konstanterna och är som standard PDO::FETCH_ORI_NEXT.
För att be om en scrollable cursor behöver du sätta attributet PDO::ATTR_CURSOR till PDO::CURSOR_SCROLL när du förbereder uttalandet med PDO::prepare.
cursorOffset
För ett PDOStatement-objekt med en scrollable cursor där cursorOrientation är inställt på PDO::FETCH_ORI_ABS anger detta värde det absoluta radnumret som ska hämtas ur resultatuppsättningen.
För ett PDOStatement-objekt med en scrollable cursor där cursorOrientation är inställt på PDO::FETCH_ORI_REL anger detta värde vilken rad som ska hämtas i förhållande till var pekaren befann sig före anropet till PDOStatement::fetch().

Returvärden

Returnerat värde på framgång beror på vilken fetch type (mode) som används. I samtliga fall returneras false vid misslyckande eller om det inte finns fler rader att hämta.

Fel/Uppslag

  • Utlöser ett fel på nivån E_WARNING om attributet PDO::ATTR_ERRMODE är inställt på PDO::ERRMODE_WARNING.
  • Kastar ett PDOException-fel om attributet PDO::ATTR_ERRMODE är inställt på PDO::ERRMODE_EXCEPTION.

Exempel

Exempel 1: Hämta rader med olika hämtlägen

<?php
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();

/* PDO::FETCH_ASSOC */
print "PDO::FETCH_ASSOC: Returnera nästa rad som en array indexerad av kolumnnamn\n";
$result = $sth->fetch(PDO::FETCH_ASSOC);
print_r($result);
print "\n";

/* PDO::FETCH_BOTH */
print "PDO::FETCH_BOTH: Returnera nästa rad som en array indexerad av både kolumnnamn och kolumnnummer\n";
$result = $sth->fetch(PDO::FETCH_BOTH);
print_r($result);
print "\n";

/* PDO::FETCH_LAZY */
print "PDO::FETCH_LAZY: Returnera nästa rad som ett PDORow-objekt med kolumnnamn som egenskaper\n";
$result = $sth->fetch(PDO::FETCH_LAZY);
print_r($result);
print "\n";

/* PDO::FETCH_OBJ */
print "PDO::FETCH_OBJ: Returnera nästa rad som ett anonymt objekt med kolumnnamn som egenskaper\n";
$result = $sth->fetch(PDO::FETCH_OBJ);
print $result->name;
print "\n";
?>

Exempelutdata kan se ut så här:

PDO::FETCH_ASSOC: Returnera nästa rad som en array indexerad av kolumnnamn
Array
(
    [name] => apple
    [colour] => red
)

PDO::FETCH_BOTH: Returnera nästa rad som en array indexerad av både kolumnnamn och kolumnnummer
Array
(
    [name] => banana
    [0] => banana
    [colour] => yellow
    [1] => yellow
)

PDO::FETCH_LAZY: Returnera nästa rad som ett PDORow-objekt med kolumnnamn som egenskaper
PDORow Object
(
    [name] => orange
    [colour] => orange
)

PDO::FETCH_OBJ: Returnera nästa rad som ett anonymt objekt med kolumnnamn som egenskaper
kiwi

Exempel 2: Hämta rader med en scrollable cursor

<?php
function readDataForwards($dbh) {
    $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY BET';
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
        $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
        print $data;
    }
}

function readDataBackwards($dbh) {
    $sql = 'SELECT hand, won, bet FROM mynumbers ORDER BY bet';
    $stmt = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL));
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_LAST);
    do {
        $data = $row[0] . "\t" . $row[1] . "\t" . $row[2] . "\n";
        print $data;
    } while ($row = $stmt->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_PRIOR));
}

print "Reading forwards:\n";
readDataForwards($conn);

print "Reading backwards:\n";
readDataBackwards($conn);
?>

Exempelutdata kan se ut så här:

Reading forwards:
21    10    5
16    0     5
19    20    10

Reading backwards:
19    20    10
16    0     5
21    10    5

Exempel 3: Konstruktionens ordning

När objekt hämtas via PDO::FETCH_CLASS sätts objektets egenskaper först, och därefter anropas klassens konstruktor. Om även PDO::FETCH_PROPS_LATE används sker detta i omvänd ordning, d.v.s. konstruktorn anropas före egenskaperna sätts.

<?php
class Person
{
    private $name;

    public function __construct()
    {
        $this->tell();
    }

    public function tell()
    {
        if (isset($this->name)) {
            echo "I am {$this->name}.\n";
        } else {
            echo "I don't have a name yet.\n";
        }
    }
}

$sth = $dbh->query("SELECT * FROM people");
$sth->setFetchMode(PDO::FETCH_CLASS, 'Person');
$person = $sth->fetch();
$person->tell();
$sth->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_PROPS_LATE, 'Person');
$person = $sth->fetch();
$person->tell();
?>

Exempelutdata kan se ut ungefär så här:

I am Alice.
I am Alice.
I don't have a name yet.
I am Bob.

Se även

Sidslut

Orginalhemsidan på Engelska :https://www.php.net/manual/en/pdostatement.fetch.php
PHP Funktioner Funktionsreferens Databas-tillägg


Det här är en maskinöversättning av PHP-manualen till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp Huddinge som har sponsrat Linux.se med webbhotell.