Avatar billede andreas13_fam Nybegynder
04. juli 2009 - 13:31 Der er 1 kommentar og
1 løsning

automatisk bind_result ?

I forbindelse med at jeg er ved at lave et MySQLi objekt kunne jeg godt tænke mig at bind_result blev udført automatisk. Jeg har prøvet 2 måder men ingen ser ud til at virke.

Metode 1 - eval

$meta = $this->query->result_metadata();
$list = array();
while ($field = $meta->fetch_field())
{
$list[] = $field->name;
}
$str  = 'if ($this->query->bind_result('  . '$' . $name . '[\'' . implode('\'], $'. $name . '[\'', $list) . '\']' . '))';
$str .= "\r\n";
$str .=    '{';
$str .= "\r\n";
$str .= 'echo "true";';
$str .= "\r\n";
$str .= '}';
$str .= "\r\n";
$str .= 'else';
$str .= "\r\n";
$str .= '{';
$str .= "\r\n";
$str .= 'echo "false";';
$str .= "\r\n";
$str .= '}';
$txt = new text();
$txt->pre("Eval ext\r\n_______________________________________\r\n" . $str);
unset($txt);
eval($str); // dette udskriver true (fra echo "true");

Metode 2 call_user_func_array
$meta = $this->query->result_metadata();
while ($field = $meta->fetch_field())
{
  $params[] = &$$name[$field->name];
}
call_user_func_array(array($this->query, 'bind_result'), $params);

Uanset hvad så køre jeg herefter
$result = array();
while ($this->query->fetch()) {
  $txt = new text();
  $txt->pre(print_r($$name,true));
  unset($txt);

  foreach($$name as $key => $val)
  {
    $c[$key] = ($this->encode == 'ISO' ? mb_convert_encoding($val, "UTF-8", "ISO-8859-1") : $val);
  }

  $result[] = $c;
}

Her opstår problemet så den skriver:
Notice: Undefined variable: row in C:\server\htdocs\MVC\model\mysqlc.class.php on line 270

Notice: Undefined variable: row in C:\server\htdocs\MVC\model\mysqlc.class.php on line 272

PS: $name er = 'row' som standart.

Alt dette er selvfølgelig en del af et objekt (http://pastebin.com/m4003abe0 - områder fremhæver) som er rimelig kompliceret, da der ikke er ryddet helt op i det. (af den grund, så se venligt bort far at komme med konstruktiv kritik. Jeg beder om feedback når jeg er færdig).
Avatar billede andreas13_fam Nybegynder
04. juli 2009 - 14:24 #1
Tilføjer jeg
global $$name;
til både
c_query::bind_result & c_query::returnarray
og køre eval metoden virker det, men er denne måde god ?
Avatar billede andreas13_fam Nybegynder
04. juli 2009 - 18:12 #2
Når har lavet objektet færdigt nu, så gider ikke og tænke over det mere :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester