Mailinglisten-Archive |
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