Nehmen wir an, ich möchte Datensätze mit Id = 30
auswählen. Vorbereitete Anweisungen erlauben zwei Arten, Parameter zu binden:
%Vor%Fragezeichen
%Vor%benannte Parameter
Beide funktionieren gut und geben genaue Ergebnisse, aber ich bin nicht in der Lage, die genauen Unterschiede zwischen diesen beiden zu erhalten, noch wenn ich das eine oder andere verwenden sollte?
Fragezeichen-Parameter heißen positional -Parameter.
Parameter, die mit :
und einem Namen definiert sind, heißen benannte -Parameter.
Die Regel besteht darin, dass Sie die beiden in Ihrer vorbereiteten Aussage nicht mischen können.
Positionsparameter funktionieren auf einfache Weise. Wenn Sie zwei Positionsparameter haben, können Sie ein Array mit zwei Elementen angeben. Array-Werte werden in der Reihenfolge gebunden, in der sie im Array angezeigt werden.
Benannte Parameter sind ein wenig komplizierter, sie müssen nicht gebunden werden, damit sie erscheinen. Sie können einen benannten Parameter auch mehrfach in der Anweisung wiederholen, aber Sie können ihn nur einmal binden, um den Wert zu übergeben - dieser letzte Teil funktioniert, wenn PDO auf Emulation über $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, TRUE);
gesetzt ist.
Dies ist eher eine Präferenz-basierte Frage, da es keine strikte richtige oder falsche Antwort gibt.
Persönlich vermeide ich ?
, da es eng an die Reihenfolge der Parameter gebunden ist. Obwohl Sie theoretisch nicht in der Lage sein sollten, dies zu stören, indem Sie eine einzelne Bindung hinzufügen oder entfernen, scheint es nur, dass es um Ärger geht. Es ist (etwas) weniger Arbeit.
:name
ist prägnanter und fest an die Identifikation von Bindungen gebunden, nicht beliebig an die Reihenfolge. Es beinhaltet ein (kleines) bisschen mehr Arbeit, aber es ist viel einfacher zu debuggen und weniger anfällig für Fehler.
Ich bevorzuge es, (etwas) prägnanter zu sein, wenn ich (etwas) weniger Code schreibe.
Tags und Links php database prepared-statement pdo named-parameters