Unterschiede zwischen der Verwendung? und: param in Vorbereitungserklärung

9

Nehmen wir an, ich möchte Datensätze mit Id = 30 auswählen. Vorbereitete Anweisungen erlauben zwei Arten, Parameter zu binden:

  

Fragezeichen

%Vor%
  

benannte Parameter

%Vor%

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?

    
CodeWithCoffee 20.04.2015, 10:50
quelle

3 Antworten

7

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.

    
N.B. 20.04.2015, 11:06
quelle
4

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.

    
DanielM 20.04.2015 11:33
quelle
1

Dies sind verschiedene Platzhalter

%Vor%

Der Unterschied zwischen named and question mark placeholders besteht darin, dass Sie bei Fragezeichen-Platzhaltern auf die Reihenfolge achten müssen, in der sie an die Abfrage gebunden sind.

    
Tushar 20.04.2015 11:03
quelle