U hebt dus een antwoord op de vraag "Waarom krijg ik deze foutmelding", maar geen antwoord gekregen voor de "verkorte PDO-query".
Hiervoor hebben we iets nodig dat "programmeren" wordt genoemd.
Een interessant aspect van programmeren is dat we ons niet beperken tot de bestaande tools, zoals bij andere beroepen. Met programmeren kunnen we altijd een eigen tool maken en deze dan gaan gebruiken in plaats van een hele set oude tools.
En Objectgeoriënteerd programmeren is daar vooral goed in, omdat we een bestaand object kunnen nemen en gewoon wat functionaliteit kunnen toevoegen, terwijl de rest ongewijzigd blijft.
Stel je bijvoorbeeld voor dat we een verkorte manier willen om een voorbereide query in PDO uit te voeren. Het enige wat we nodig hebben is verlengen het PDO-object met een nieuwe stenomethode. Het moeilijkste is om de nieuwe methode een naam te geven.
De rest is simpel:je hebt maar een paar regels code nodig
class MyPDO extends PDO
{
public function run($sql, $bind = NULL)
{
$stmt = $this->prepare($sql);
$stmt->execute($bind);
return $stmt;
}
}
Dit is de hele code jij hebt nodig. U kunt het opslaan in hetzelfde bestand waar u uw databasereferenties opslaat. Houd er rekening mee dat deze toevoeging geen invloed heeft op uw bestaande code op welke manier dan ook - het blijft precies hetzelfde en u kunt alle bestaande PDO-functionaliteit gewoon blijven gebruiken.
Nu hoef je slechts 2 letters in de PDO-constructor te veranderen, door het aan te roepen als
$conn = new MyPDO(...the rest is exactly the same...);
En u kunt onmiddellijk uw glimmende nieuwe tool gaan gebruiken:
$sql = "SELECT * FROM myTable WHERE id = :id";
$result = $conn->run($sql, ['id' => $id])->fetchAll(PDO::FETCH_ASSOC);
Of, om het een beetje te optimaliseren,
$result = $conn->run("SELECT * FROM myTable WHERE id = ?", [$id])->fetchAll();
omdat u altijd de standaard ophaalmodus voor eens en altijd kunt instellen, en voor slechts een enkele variabele heeft de genoemde tijdelijke aanduiding geen zin. Dat maakt deze code een echte steno vergeleken met het geaccepteerde antwoord,
$stmt_test = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$stmt_test->execute([$id]);
$result = $stmt_test->fetchAll(PDO::FETCH_ASSOC);
en zelfs op het beste antwoord dat je tot nu toe hebt gekregen,
$result = $conn->prepare("SELECT * FROM status WHERE status_id = ?");
$result->execute([$id]);
om nog maar te zwijgen van het feit dat de laatste niet altijd bruikbaar is, omdat het alleen geschikt is om een array te krijgen. Terwijl met een echte steno elk resultaatformaat is mogelijk:
$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