[MySQL] liest falschen Wert aus

glowhand

Programmierer
21 April 2006
273
16
Also, anscheinend stehe ich gerade total aufm Schlauch.

Folgende Zeilen stehen in meinem PHP-Script:

PHP:
$db = Functions::getDB();
$users = $db->query('SELECT id, xPosition, yPosition,
                                nickname, mapFigure, teamID, experience
                             FROM :table',
                            array('table' => 'users'));
print_r($users);

Das :table wird in der Datenbank-Klasse mit prefix_users ersetzt, also heißt der SQL-Ausdruck ganz einfach:
SELECT id, xPosition, yPosition,nickname, mapFigure, teamID, experience
FROM prefix_users'

In der Tabelle prefix_users befindet sich nur 1 Eintrag. Hier mal ein Screenshot:


Ich habe extra diesen Ausschnitt gewählt, damit man den Wert für xPosition sieht.

Das print_r($users) gibt folgendes aus:
Code:
Array
(
    [0] => Array
        (
            [id] => 1
            [0] => 1
            [xPosition] => 0
            [1] => 0
            [yPosition] => 50
            [2] => 50
            [nickname] => glowhand
            [3] => glowhand
            [mapFigure] => avatar1
            [4] => avatar1
            [teamID] => 6
            [5] => 6
            [experience] => 1
            [6] => 1
        )

)

Bei xPosition steht also eine 0.
Eigentlich müsste es doch eine 50 auslesen. :-?
 
rein von dem was du sagst hast du wohl recht, aber MySQL wird definitiv nicht einen falschen Wert zurückgeben, ich würde vermuten die Datenbankklasse macht etwas anderes als du eigentlich erwartest
 
So sieht die Methode in der DB-Klasse aus:
PHP:
// Abfrage
  public function query($query,array $args = array())
  {
    // Tabellennamen ersetzen
    $tableKey = 'table';
    $count = 1;
    while(isset($args[$tableKey]))
    {
      $query = preg_replace('/(:'.$tableKey.')([^0-9]|$)/',$this->prefix.'_'.$args[$tableKey].'$2',$query);
      $count++;
      $tableKey = 'table'.$count;
    }
    
    unset($args['table']);
    
    // Variablen einsetzen
    $result = $this->db->prepare($query);   
    foreach($args as $key => $value)
    {
       $result->bindValue(':'.$key,$value);
    }
    
    if (DEBUG_MODE == true)
    {
      $res = $result->execute();
    }
    else
    {
      @$res = $result->execute();
    }


    if (!$res)
    {
      foreach($args as $key => $value)
      {
        $query = str_replace(':'.$key,'\''.$value.'\'',$query);
      }
      $errorInfo = $result->errorInfo();
      if ($errorInfo[0] != 0) $errCode = $errorInfo[2];
      else $errCode = '';
      throw new Error('Fehler bei SQL-Query: '.$query.'<br />'.$errCode);
      die;
    }
    
    
    $return = $result->fetchAll();
    $this->queries++;
    return $return;
  }
funktionierte bisher wunderbar.

achso und hier nochmal der konstruktor:
PHP:
private function __construct($dbType,$dbHost,$dbPrefix,$dbName,$dbUser,$dbPass)
  { 
    try
    { 
      $this->db = new PDO($dbType.':dbname='.$dbName.';host='.$dbHost,$dbUser,$dbPass);
      $this->prefix = $dbPrefix;
    }
    catch (PDOException $e)
    {
      echo $e->getMessage();
    }
  }