sql >> Databáze >  >> RDS >> Mysql

zkrácený dotaz na PDO

Takže jste dostali odpověď na otázku „Proč se mi zobrazuje tato chyba“, ale nedostali jste odpověď na „zkrácený dotaz na PDO“.

K tomu budeme potřebovat trochu věci zvané „programování“.

Jedna zajímavá věc na programování je, že nejsme omezeni na existující nástroje, jako u jiných profesí. Pomocí programování můžeme vždy vytvořit vlastní nástroj a pak jej začít používat místo celé sady starých nástrojů.

A objektově orientované programování je v tom obzvláště dobré, protože můžeme vzít existující objekt a přidat jen nějakou funkcionalitu a zbytek nechat tak, jak je.

Představte si například, že chceme zkrácený způsob spuštění připraveného dotazu v PDO. Vše, co potřebujeme, je prodloužit objekt PDO pomocí nové zkrácené metody. Nejtěžší je dát nové metodě název.

Zbytek je jednoduchý:potřebujete jen několik řádků kódu

class MyPDO extends PDO
{
    public function run($sql, $bind = NULL)
    {
        $stmt = $this->prepare($sql);
        $stmt->execute($bind);
        return $stmt;
    }
}

Toto je celý kód potřebuješ. Můžete jej uložit do stejného souboru, kde ukládáte přihlašovací údaje k databázi. Upozorňujeme, že toto přidání neovlivní váš stávající kód jakýmkoliv způsobem - zůstává přesně stejný a můžete nadále používat všechny stávající funkce PDO jako obvykle.

Nyní musíte změnit pouze 2 písmena v konstruktoru PDO a nazvat jej jako

$conn = new MyPDO(...the rest is exactly the same...);

A okamžitě můžete začít používat svůj zbrusu nový nástroj:

$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);

Nebo to trochu optimalizovat

$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();

protože vždy můžete nastavit výchozí režim načítání jednou provždy a pouze pro jednu proměnnou není použití pojmenovaného zástupného symbolu. Což z tohoto kódu dělá skutečnou zkratku ve srovnání s přijatou odpovědí,

$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);

a dokonce i na tu nejlepší odpověď, kterou jste dosud dostali,

$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);

nemluvě o tom, že to druhé není vždy použitelné, protože se hodí pouze pro získání pole. Zatímco s skutečným je možný zkrácený jakýkoli formát výsledku:

$result = $conn->run($sql, [$id])->fetchAll(); // array
$result = $conn->run($sql, [$id])->fetch(); // single row
$result = $conn->run($sql, [$id])->fetchColumn(); // single value
$result = $conn->run($sql, [$id])->fetchAll(PDO::FETCH_*); // dozens of different formats


  1. SQL Vypočítejte průměrný časový rozdíl mezi celkovými řádky

  2. Nelze vygenerovat graf Google pomocí dat tabulky MySQL jako zdroje dat

  3. Vytvořte jedinečné omezení s prázdnými sloupci

  4. Agent je zablokován