So haben Sie eine Antwort auf die Frage bekommen „Warum ich diese Störung erhalten“, aber nicht eine für die „Kurzschrift PDO Abfrage“ habe.
Dafür brauchen wir etwas "Programmierung" genannt.
Eine interessante Sache bei der Programmierung ist, dass wir nicht wie bei anderen Berufen auf die vorhandenen Werkzeuge beschränkt sind. Mit der Programmierung können wir immer ein eigenes Werkzeug erstellen und es dann anstelle eines alten verwenden.
Und Object Oriented Programming ist besonders gut damit, da wir ein vorhandenes Objekt nehmen und nur etwas Funktionalität hinzufügen können, so dass der Rest wie er ist.
Stellen Sie sich beispielsweise vor, wir möchten eine Kurzform, um eine vorbereitete Anfrage in PDO auszuführen. Alles, was wir brauchen, ist, das PDO-Objekt mit einer neuen Kurzschreibweise zu erweitern. Der schwierigste Teil ist, der neuen Methode einen Namen zu geben.
Der Rest ist einfach: you need only few lines of code
class MyPDO extends PDO
{
public function run($sql, $bind = NULL)
{
$stmt = $this->prepare($sql);
$stmt->execute($bind);
return $stmt;
}
}
Dies ist der gesamte Code Sie benötigen. Sie können es in derselben Datei speichern, in der Sie Ihre Datenbankanmeldeinformationen speichern. Beachten Sie, dass dieser Zusatz in keiner Weise Ihren bestehenden Code beeinflusst - er bleibt genau derselbe und Sie können weiterhin wie gewohnt alle vorhandenen PDO-Methoden verwenden.
Jetzt müssen Sie nur zwei Buchstaben im PDO-Konstruktor ändern, als
$conn = new MyPDO(...the rest is exactly the same...);
aufrufen und sofort können Sie beginnen, Ihr glänzendes neues Werkzeug:
$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);
Oder, um es ein wenig zu geben die Optimierung
$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();
wie Sie Modus ein für alle Male immer gesetzt Standard holen können, und für nur singen Für den benannten Platzhalter gibt es keine Variable. Welche diesen Code auf die akzeptierte Antwort, eine echte Stenografie Vergleich macht
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
und sogar die beste Antwort, die Sie so weit haben,
$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);
nicht zu erwähnen, dass dieser nicht immer verwendbar, da es nur für ein Array geeignet ist. Während mit einer realen Stenografie jeden Ergebnis-Format ist 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
Mögliches Duplikat [PDO - Call auf eine Elementfunktion holen() auf einem Nicht-Objekt] (http://stackoverflow.com/questions/ 12126193/pdo-call-to-a-member-function-fetch-on-a-non-object) – johannes
@johannes Obwohl der Fehler einen ähnlichen Namen hat, unterscheiden sich die Situationen, in denen der Fehler verursacht wird. – Webeng
Ah habe nicht sorgfältig genug gelesen, werde unten antworten. – johannes