phpbar.de logo

Mailinglisten-Archive

[php] Funktion mit n Parametern aufrufen

[php] Funktion mit n Parametern aufrufen

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Don Feb 10 12:37:30 CET 2005


Hi Christoph,

Christoph Rust schrieb:
> Hab folgendes Problem:
> Ich schreib gerade Interface-Klassen für MySQLI.
> Dabei hängt es aber an der Methode MySQLI::Statement::bind_param(), da
> dort eine Liste von Parametern für die Statements übergeben werden können.
> Also hab ich mich in der Interface-Methode für eval entschieden.
>
> <Code>
>
>         $objStatement = $this->objStatement;
>
>         $command = 'return ';
>         $command .= '$objStatement->bind_param(';
>         $command .= '"'.$types.'"';
>
>         for ($i = 1; $i < func_num_args(); $i++){
>
>             $argItem = func_get_arg($i);
>
>             if (is_string($argItem)){
>                 $argItem = '"{$argItem}"';
>             }
>             elseif (is_null($argItem)){
>                 $argItem = 'null';
>             }
>             elseif (is_bool($argItem)){
>
>                 if ($argItem){
>                     $argItem = 'true';
>                 } else {
>                     $argItem = 'false';
>                 }
>
>             }
>
>             $command .= ','.$argItem;
>
>         }
>
>         $command .= ');';
>
>         echo $command;
>
>         echo eval($command);
>
> </Code>
>
> Leider funzt das ganze net so wie ich das will, da folgende
> Fehlermeldung auftaucht:
>
> <Code>
>
> return $objStatement->bind_param("ssd",123,123,123);
> *Fatal error*: Cannot pass parameter 2 by reference in *datei.php(65) :
> eval()'d code* on line *1*
>
> </Code>
>
> Zur Informationen: PHP 5.0.3
>
> Kann mir jemand sagen, wo der Fehler liegt?

nach einem Blick ins Online-Handbuch (
http://de3.php.net/manual/en/function.mysqli-stmt-bind-param.php ) scheint
Dein Code zwei Fehler zu enthalten, wenn ich alles auf die Schnelle
richtig erfaßt habe:

1. Du verwendest die objektorientierte Programmierweise, d.h. die Syntax
lautet:

  bool bind_param ( array types, mixed &var1 [, mixed &...] )

Die Typen werden also hier, anders als bei der prozeduralen
Programmierweise, in einem Array und nicht als String übergeben.

2. "ssd" bedeutet String, String, Double. Du übergibst aber drei Integer.

Aus meiner Sicht, ohne es testen zu können, müßte es also so aussehen:

  return $objStatement->bind_param(array('i','i','i'),123,123,123);


Viele Grüße

Lutz


php::bar PHP Wiki   -   Listenarchive