Masz odpowiedź na pytanie „Dlaczego otrzymuję ten błąd”, ale nie dostałeś odpowiedzi na „skrócone zapytanie PDO”.
Do tego będziemy potrzebować czegoś, co nazywa się „programowaniem”.
Ciekawą rzeczą w programowaniu jest to, że nie ograniczamy się do istniejących narzędzi, jak w przypadku innych zawodów. Dzięki programowaniu zawsze możemy stworzyć własne narzędzie, a następnie zacząć go używać zamiast całego zestawu starych narzędzi.
Programowanie zorientowane obiektowo jest w tym szczególnie dobre, ponieważ możemy wziąć istniejący obiekt i po prostu dodać kilka funkcji, pozostawiając resztę bez zmian.
Na przykład wyobraźmy sobie, że chcemy skrócić sposób uruchamiania przygotowanego zapytania w PDO. Wszystko, czego potrzebujemy, to rozszerzać obiekt PDO z nową metodą skróconą. Najtrudniejsze jest nadanie nowej metodzie nazwy.
Reszta jest prosta:wystarczy kilka linijek kodu
class MyPDO extends PDO
{
public function run($sql, $bind = NULL)
{
$stmt = $this->prepare($sql);
$stmt->execute($bind);
return $stmt;
}
}
To jest cały kod potrzebujesz. Możesz przechowywać go w tym samym pliku, w którym przechowujesz poświadczenia bazy danych. Pamiętaj, że to dodanie nie wpłynie na Twój istniejący kod w jakikolwiek sposób - pozostaje dokładnie taka sama i możesz nadal korzystać ze wszystkich istniejących funkcji PDO jak zwykle.
Teraz musisz zmienić tylko 2 litery w konstruktorze PDO, nazywając go
$conn = new MyPDO(...the rest is exactly the same...);
I od razu możesz zacząć korzystać z nowego, błyszczącego narzędzia:
$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);
Lub trochę optymalizacji,
$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();
ponieważ zawsze możesz ustawić domyślny tryb pobierania raz na zawsze, a dla pojedynczej zmiennej nie ma zastosowania nazwany symbol zastępczy. Co sprawia, że ten kod jest prawdziwym skrótem w porównaniu z zaakceptowaną odpowiedzią,
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
a nawet do najlepszej odpowiedzi, jaką masz do tej pory,
$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);
nie wspominając o tym, że ten ostatni nie zawsze jest użyteczny, ponieważ nadaje się tylko do pobrania tablicy. Podczas gdy z prawdziwym skrócony dowolny format wyników jest możliwy:
$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