dedlfix: PDO Problem mit Prepared Statement, Cannot pass parameter 2 by r

Beitrag lesen

echo $begrüßung;

Ein Ausdruck kann nicht als Referenz übergeben werden, das geht nur mit Variablen. Es ist auch wenig sinnvoll, konstante Werte jedes Mal neu zu übergeben. Schreib diese direkt in das Statement.
hmm, so ganz kapiert habe ich das nicht was du meinst.

Zu Referenzen im Allgemeinen gibt es ein Handbuchkapitel: References Explained
Wenn eine Funktion eine Referenz übergeben haben möchte, wie das beim zweiten Parameter von bindParam() der Fall ist, dann muss eine Variable übergeben werden. PHP übergibt dann nicht den Inhalt der Variable sondern nur einen Verweis darauf.

kannst du mir ein Beispiel zeigen was du mit "direkt in das Statement" meinst?

Du hast eine konstante Zeichenkette und keinen variablen Wert. Du kannst diese konstante Zeichenkette direkt notieren und musst sie nicht jedes Mal als Parameter übergeben.

$dbInsertdata = $DBO->prepare("INSERT INTO datak (jobID,kName,kValue) VALUES  (:jobid, 'JobLogError', 'no')");
  $dbInsertdata->bindParam(':jobid', $_SESSION['jobID_s']);
  $dbInsertdata->execute();

Oder sollte ich bei Strings als Value dann anstatt bindParam => bindValue verwenden?

bindValue() wäre eine Möglichkeit, solche konstanten Werte zu übergeben. Aber sinnvoll ist das nicht. Prepared Statements wurden erfunden, um eine Abfrage mehrfach, aber mit wechselnden Parametern aufzurufen. Die Query muss dann nur einmal geparst werden und nicht bei jedem Aufruf erneut. Bei nur einer Ausführung pro Instanz (Scriptaufruf) kann man diesen Vorteil von P.S. nicht ausnutzen.

Aufgrund dieses vorgesehenen Anwendungszwecks ist es verständlich, wenn man davon ausgeht, nur variable Werte übergeben zu können, und alles was feststeht beim Prepare abzuhandeln. Man kann sogar weitergehen und bei weiteren Ausführungen (in der selben Instanz) nur den angebundenen Variablen neue Inhalte zu geben und anschließend execute() auszuführen (ohne vorher prepare() und bindParam() erneut auszuführen). Das vorbereitete Statement referenziert ja immer noch auf die gleiche Variablen. Das execute() verwendet dann einfach den neuen Inhalt.

echo "$verabschiedung $name";