Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Cannot pass parameter 2 by reference in

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Cannot pass parameter 2 by reference in

    Hallo zusammen,

    ich sitz gerade an einem Problem, wo ich nicht genau ausmachen kann, wo es genau herkommt.
    Ich möchte ein paar Daten in einer datenbank updaten, jedoch habe ich immer wieder probleme mit dem bind_param's. Folgende Fehlermeldung erhalte ich:
    Cannot pass parameter 2 by reference in ...
    Folgender Code verursacht den Fehler (Zeile: da wo die bind_param gesetzt werden):

    PHP-Code:
    $sql "UPDATE cat SET pos=? WHERE id=?";
    $eintrag $db->prepare$sql );

    for ( 
    $i=$i<count($cat_id) ; $i++) {
        
    $eintrag->bind_param'ii'$i+2$cat_id[$i] );
        
    $eintrag->execute();    

    Vorher baue ich natürlich die DB-Verbindung mit dem handle $db auf. Das klappt auch einwandfrei.

    Ich hab mich schon soweit ich es verstanden hab informiert und in Forenbeiträgen wurde gesagt, dass hier eine Referenz auf eine noch nicht geladene Variable durchgeführt wird, bzw. ist sie leer. Aber ich weiß nicht genau, was damit gemeint sein kann, oder ob das überhaupt bei mir der gleiche fall ist.

    Ich hoffe ihr könnt mir weiterhelfen, damit ich diese Sache endlich mal besser verstehe.

    reeky

  • #2
    Die Fehlermeldung sagt ja eigentlich schon alles und spätestens ein Blick in die Man-Page sollte das Problem klären. Der zweite Parameter wird als Referenz übergeben, jedoch kann man einen Ausdruck nicht referenzieren. Du muss es also folgendermaßen schreiben:
    PHP-Code:
    $j $i 2;
    $eintrag->bind_param'ii'$j$cat_id[$i] ); 
    Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

    Kommentar


    • #3
      Danke für die schnelle Antwort.
      Das hat mir wirklich weitergeholfen.

      Weiter unten in meinem Quelltext hatte ich noch so eine passage mit bind_param.

      Da wollte ich gleich eine Zahl einbinden, also so hier:

      PHP-Code:
      $eintrag->bind_param'si'$title); 
      Da hatte er mir auch gesagt, dass das nicht möglich ist wegen der Referenz. Als ich die 1 in eine Variable gepackt habe, hat es geklappt.
      Aber warum ist das so und warum kann ich da nicht direkt eine Zahl verwenden?

      Kommentar


      • #4
        Weil die Parameter als Referenz gefordert werden. Das ermöglicht es dir, die Parameter auch im Nachhinein noch zu ändern ohne den gesamten Bind-Vorgang wiederholen zu müssen. E.g.:
        PHP-Code:
        $eintrag->bind_param'si'$title );
        $title 'Lorem ipsum';    // du kannst den Wert hier noch ändern ohne erneut bind_param() nutzen zu müssen 
        Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

        Kommentar


        • #5
          Zitat von reeky Beitrag anzeigen
          Aber warum ist das so und warum kann ich da nicht direkt eine Zahl verwenden?
          Weil eine Referenz ein Verweis auf eine Speicherstelle ist, an der ein Wert abgelegt ist. Reine Ausdrücke werden aber nirgendwo im Speicher abgelegt.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            Ein Blick in die Doku hätte auch geholfen PHP: PDOStatement->bindParam - Manual

            Zitat:
            Name of the PHP variable to bind to the SQL statement parameter.

            Kommentar


            • #7
              Wie ich schrieb…
              Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

              Kommentar


              • #8
                Zitat von Trainmaster Beitrag anzeigen
                Ein Blick in die Doku hätte auch geholfen PHP: PDOStatement->bindParam - Manual
                abgesehen davon, daß bind_param() zu MySQLi gehört …

                Kommentar


                • #9
                  Was in diesem Falle aber sogar egal gewesen wäre, aber ja.
                  Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

                  Kommentar

                  Lädt...
                  X