MySQL liefert Doppelten result

JesusFreak777

Erfahrenes Mitglied
Hallo Ihr,

vermutlich ist es was einfaches... aber ich komm einfach nicht drauf...

ich verwende (schon sehr lange) genau diese Klasse:

PHP:
class mysql
{
    private $host     = '';
    private $user     = '';
    private $passwort     = '';
    private $dbname     = '';
    private $last_injection = '';
    private $conn_id = null;
    public function __construct($host, $user, $passwort, $dbname)
    {
        $this->host     = $host;
        $this->user     = $user;
        $this->passwort = $passwort;
        $this->dbname     = $dbname;
        $this->connect_mysql();
        return($this->conn_id);
    }
    private function connect_mysql()
    {
        $this->conn_id = mysql_connect($this->host,$this->user,$this->passwort);
        if($this->conn_id === false)
        {
            $message  = "Verbindung zur Datenbank nicht m&ouml;glich.<br />\n";
            $message .= "Mysql-fehlermeldung: <br />\n";
            $message .= mysql_error();
            trigger_error($message);
            }
            else
            {
            $this->select_db();
        }
    }
    private function select_db()
    {
        $select = mysql_select_db($this->dbname,$this->conn_id);
        if($select === false)
        {
            $message  = "Die angegebene Datenbank \"".$this->dbname."\" existiert nicht.<br />\n";
            $message .= "Mysql-fehlermeldung: <br />\n";
            $message .= mysql_error();
            trigger_error($message);
        }
    }
    public function query($sqlcode)
    {
        $this->last_injection = mysql_query($sqlcode);
            if($this->last_injection === false)
            {
                $message  = "Fehler bei dem Ausf&uuml;hren eines Mysql-codes!<br />\n";
                $message .= "Mysql-Code: " . htmlspecialchars($sqlcode, ENT_QUOTES) . "<br />\n";
                $message .= "Mysql-fehlermeldung:<br />\n";
                $message .= mysql_error();
                trigger_error($message);
            }
        return($this->last_injection);
    }
    public function array_result($sql = NULL, &$row = '')
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $row = mysql_fetch_array($inc);
        return($row);
    }
    public function row_result($sql = NULL, &$row = '')
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $row = mysql_fetch_row($inc);
        return($row);
    }
    public function object_result($sql = NULL, &$row = '')
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $row = mysql_fetch_object($inc);
        return($row);
    }
    public function assoc_result($sql = NULL, &$row = '')
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $row = mysql_fetch_assoc($inc);
        return($row);
    }
    public function num_result($sql = NULL)
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $num = mysql_num_rows($inc);
        return($num);
    }
    public function sql_string($string)
    {
        return(mysql_real_escape_string($string));
    }
    public function free_result($sql = NULL)
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        mysql_free_result($inc);
    }
    public function result($set = 0, $field = 0, $sql = NULL, &$row = '')
    {
        $inc = '';
        if($sql === NULL)
        {
            $inc = $this->last_injection;
            } else {
            $inc = $sql;
        }
        $row = mysql_result($result, $set, $field);
        return($row);
    }
    public function insert_id(&$row = '')
    {
        $row = mysql_insert_id();
        return($row);
    }
    public function close_connect()
    {
        mysql_close($this->conn_id);
    }
}

Bei folgenden Abruf
PHP:
$res = $sql->query("SELECT ID, feld1 FROM `tabelle` ORDER BY `ID` DESC;");
Liefert mir diese Klasse doppelten result zurück:

d.h. ich bekomme für jede Spalte sowohl eine Zahl und einmal den Titel zurück:
0 => 1 // das ist die ID
ID => 1 // das ist sie nochmal
1 => bla // das ist feld1
feld1 => bla // nochmal feld1
...

bisher war das kein Problem... nur jetzt geht es um jede millisekunde...

was muss ich verändern, das ich keine "Nummerierung" mehr zurückbekomme?

Vielen Dank
 
Es wäre auch interessant, wie du dieses abstrakte mysql_query-Result ausliest/ausgibst.
Ansonsten, vllt. hilft ja das Umschreiben weg von der alten Mysql-Extenison...
 
Zuletzt bearbeitet:
@sheel, soweit ich weiß hat auch PDO beide Inidzes bei einer Abfrage.
Bezüglich des loswerden, du kannst beim ersten Aufruf it einem %2 == 1 arbeiten und die nicht gewollten per unset(Array) entfernen. Muss man sich nur noch merken ob schon entfernt wurde oder nicht.
 
Jetzt, wo du es sagst ... kann mich dunkel daran erinnern.
Liegt wohl daran, dass ich schon länger nichts eigenes in der Richtung gemacht hab
und sonst eigentlich immer direkt per Index auf bestimmte Werte zugreif, statt alle Indizes durchzuloopen
 
Zurück