ZodiacXP
Erfahrenes Mitglied
Auch wenn die folgende Klasse einzeln gesehen wenig sinn macht, ist sie im gesamten System unabdingbar. Deswegen ist der folgende Fehler umso ärgerlicher:
Die erste Zeile eines mysql-Results wird doppelt ausgegeben.
Ablauf: rewind(), current(), next(), current(), next(), ...
Vermutungen:
Aber je öfter ich meine Vermutung prüfe umso valider sehe ich das ganze. Hoffe ihr seht unvoreingenommen sofort den Fehler:
Die erste Zeile eines mysql-Results wird doppelt ausgegeben.
Ablauf: rewind(), current(), next(), current(), next(), ...
Vermutungen:
- rewind() setzt falsch zurück [denkbar],
- next() zählt nicht ordentlich hoch [undenkbar],
- current() wählt durch die Kontrollstrukturen die erste Zeile zwei mal [bestimmt]
- Wenn die erste Zeile doppelt ist, könnte evtl auch die letzte fehlen.
Aber je öfter ich meine Vermutung prüfe umso valider sehe ich das ganze. Hoffe ihr seht unvoreingenommen sofort den Fehler:
PHP:
abstract class Db_Statement {
protected $_line = 0;
private $_result = NULL;
private $_current = array();
}
class Db_Statement_mysql extends Db_Statement implements Iterator {
public function current ()
{
if ($this->_current === NULL)
{
$this->_current = mysql_fetch_assoc($this->_result);
}
return $this->_current;
}
public function next ()
{
$this->_line++;
$this->_current = NULL;
}
public function key ()
{
return $this->_line;
}
public function valid ()
{
return ($this->_line <= $this->_valid);
}
public function rewind ()
{
if ($this->_line != 1)
{
mysql_data_seek($this->_result, 0); // goto first line
$this->_line = 1; // reset counter
}
$this->_current = mysql_fetch_assoc($this->_result);
}
function __construct($result) {
if ($result === false)
{
echo mysql_error();
}
$this->_result = $result;
$this->_current = NULL;
$this->_valid = mysql_num_rows($this->_result);
}
}
Zuletzt bearbeitet: