Reflection + parameter expected to be a reference

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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?

    Comment


    • #3
      Hallo,

      Originally posted by Flip7 View Post
      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]

      Comment

      Working...
      X