Reflection + parameter expected to be a reference

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

  • Reflection + parameter expected to be a reference

    Hallo,

    ich habe folgende Methode in einer selbstgebauten Query-Klasse, die mit Singleton auf ein Databaseobjekt zugreift (das über eine Factory).
    Ich wollte mir die mysqli Klasse einfacher schreiben, sodass ich nur noch mit bind( mixed $something ) einen Parameter binden muss. Ohne die Angabe der Typen 's' für string etc...

    Nun muss ich den bind_param Aufruf mithilfe der Reflection und einem invoke-Aufruf vornehmen.

    Das Problem ist, dass bind_param als Parameter Referenzen haben will, sodass invokeArgs(...) nicht funktioniert, das der zweite Parameter ein Array. Mir ist klar, wieso der Fehler auftritt, jedoch weiß ich nicht wie ich das umgehen kann. Wieso ist denn bind_param so scharf auf Referenzen?

    Hier noch mein Code, vielen Dank schon mal ;-)

    PHP-Code:
            public function execute( )
            {
                
    // singleton
                
    $database Factory :: getComponent"Database" ) -> getConnection( );
                
                
    $this -> _statement $database -> stmt_init( );
                
                if( ! 
    $this -> _statement )
                    throw new 
    DatabaseQueryException$database -> connect_errno ': ' $database -> connect_error );
                
                
    $this -> _statement -> prepare$this -> _query );
                
                
    $o = new ReflectionObject($this -> _statement );
                
                
    $rClass = new ReflectionClass"mysqli_stmt" );
                
    $rMethod $rClass -> getMethod"bind_param" );
                
                
    // liefert den String mit den Typen (s,i,...)
                // und den konkreten Werten
                
    $reflectionCall $this -> _binding -> getReflectionCallArray( );
                
                
    $rMethod -> invokeArgs$this -> _statement$reflectionCall );
                
                
    $this -> _statement -> execute( );
                
                
    // just a test
                
    echo $this -> _statement -> num_rows( );
            } 
    Find Parties?
    Partysuche

  • #2
    Hä? Was soll das werden und warum so kompliziert?

    Wieso liefert getReflectionCallArray() eigentlich einen String?

    Kommentar


    • #3
      Hallo,

      Zitat von Flip7 Beitrag anzeigen
      Wieso ist denn bind_param so scharf auf Referenzen?
      Weil Prepared Statements meistens mehrfach benutzt werden und man sonst (ohne Referenzen) die Parameter vor jedem Aufruf von execute erneut binden müsste. Dadurch, dass es Referenzen sind, genügt es, den Wert der Variablen zu ändern:

      PHP-Code:
      $stmt $mysqli->prepare("insert into tabelle values (?)");
      $stmt->bind_param('s'$name);

      $name "Helmut";
      $stmt->execute();

      $name "Heidi";
      $stmt->execute();

      $name "Klaus";
      $stmt->execute();

      $name "Karin";
      $stmt->execute(); 
      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar

      Lädt...
      X