Mysql
 sql >> Datenbank >  >> RDS >> Mysql

abgekürzte PDO-Abfrage

Sie haben also eine Antwort auf die Frage "Warum ich diesen Fehler bekomme", aber keine Antwort auf die "kurze PDO-Abfrage".

Dafür brauchen wir etwas namens "Programmierung".

Eine interessante Sache beim Programmieren ist, dass wir uns nicht wie bei anderen Berufen auf die vorhandenen Werkzeuge beschränken. Mit der Programmierung können wir immer ein eigenes Tool erstellen und es dann anstelle eines ganzen Satzes alter Tools verwenden.

Und die objektorientierte Programmierung ist besonders gut darin, da wir ein vorhandenes Objekt nehmen und nur einige Funktionen hinzufügen können, während wir den Rest unverändert lassen.

Stellen Sie sich zum Beispiel vor, wir möchten eine vorbereitete Abfrage in PDO abkürzend ausführen. Alles, was wir brauchen, ist erweitern das PDO-Objekt mit einer neuen Kurzschriftmethode. Das Schwierigste ist, der neuen Methode einen Namen zu geben.

Der Rest ist einfach:Sie brauchen nur wenige Codezeilen

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

Das ist der gesamte Code du brauchst. Sie können es in derselben Datei speichern, in der Sie Ihre Datenbankanmeldeinformationen speichern. Beachten Sie, dass dieser Zusatz Ihren vorhandenen Code nicht beeinflusst in irgendeiner Weise - es bleibt genau gleich und Sie können alle bestehenden PDO-Funktionen wie gewohnt weiter verwenden.

Jetzt müssen Sie nur 2 Buchstaben im PDO-Konstruktor ändern und ihn als

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

Und sofort können Sie Ihr glänzendes neues Werkzeug verwenden:

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

Oder es etwas optimieren,

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

da Sie den Standardabrufmodus immer ein für alle Mal festlegen können und für nur eine einzelne Variable der benannte Platzhalter keine Verwendung hat. Das macht diesen Code zu einer echten Kurzschrift verglichen mit der akzeptierten Antwort,

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

und sogar zu der besten Antwort, die Sie bisher bekommen haben,

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

ganz zu schweigen davon, dass letzteres nicht immer verwendbar ist, da es nur zum Abrufen eines Arrays geeignet ist. Während mit einem echten Kurzform ist jedes Ergebnisformat möglich:

$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