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