[PHP] objektovy vystup z databaze

Webdesign, HTML, CSS, Flash, PHP, ASP, .NET, JavaScript. Kritika www stránek na Smetišti.

Moderátor: Moderátoři Živě.cz

Odeslat příspěvekod Olimant 25. 4. 2012 17:38

Ahoj, mám takovej problém. Doufám, že na to nejdu uplně blbě. Mám třídu, pomocí níž přistupuju k databázi a jinou třídu, která implementuje iterator tak, abych mohl prochazet vysledek pomoci foreach. Chtel bych ale, abych mohl přistupovat k výsledku ve foreach jako k atributu např $row->id.
Ted jsem tak na pul cesty. Funguje me foreach i $row->id, ale ne dohromady a když k tomu přistupuju přes objekt, tak mě to vrátí jen jeden řádek z databáze.

index:
Kód: Vybrat vše
require_once 'config.php';
$con = Database::getInstance();
$con->setConnection($host, $user, $pass, $DBname);
$obj = $con->query('SELECT * FROM zamestnanci')
              ->getMySQLFetchObject();
var_dump($obj);
echo $obj->jmeno; //Takhle by to melo byt pristupny ve foreach

foreach ($con->query('SELECT * FROM zamestnanci') as $row) {
    echo $row['jmeno']. ' ' .$row['prijmeni'].'<br />';
}

Database:
Kód: Vybrat vše
class Database{
    private static $instance = null;
    private $DBname;
    private $connection;
   
    protected function __construct() {}
    private function __clone() {}

    public static function getInstance(){
        if(null == self::$instance) {
            self::$instance = new self();   
        }
        return self::$instance;
    }
   
    public function setConnection($hostname, $username, $password, $DBname){
        $this->connection = mysql_connect($hostname, $username, $password);
        $this->DBname = $DBname;
    }
   
    public function query($strSQL){
        $rs = new MySQLResultSet($strSQL, $this->DBname, $this->connection );
        return $rs;
    }
}

MySQLResultSet:
Kód: Vybrat vše
class MySQLResultSet implements Iterator{

  private $strSQL;
  private $databasename;
  private $connection;
  private $result;
  private $valid;
  private $currentrow;
  private $key;

  public function __construct( $strSQL, $databasename, $connection ){
    $this->strSQL = $strSQL;
    $this->connection = $connection;
    $this->databasename = $databasename;

    mysql_selectdb($databasename, $connection);
    $this->result = mysql_query($strSQL, $connection);
    $this->rewind();
  }

  public function getMySQLFetchObject(){
    return MySQL_fetch_object($this->result);
  }

  public function current (){
    return $this->currentrow;
  }

  public function key (){
    return $this->key;
  }

  public function next (){
    if($this->currentrow = mysql_fetch_array($this->result)){
      $this->valid = true;
      $this->key++;
    }else{
      $this->valid = false;
    }
  }

  public function rewind (){
    if($num = mysql_num_rows($this->result) > 0){
      if(mysql_data_seek($this->result, 0)){
        $this->valid = true;
        $this->key = 0;
        $this->currentrow = mysql_fetch_array($this->result);
      }
    }else{
      $this->valid = false;
    }
  }

  public function valid (){
    return $this->valid;
  }


Mohl by me prosim nekdo poradit jak to udelat abych mohl napsat neco jako tohle?:
Kód: Vybrat vše
foreach ($con->query('SELECT * FROM zamestnanci') as $row) {
    echo $row->jmeno. ' ' .$row->prijmeni.'<br />';
}


Diky moc za rady ;-)
Kdo víno má a nepije, kdo hrozny má a nejí je, kdo ženu má a nelíbá, kdo zábavě se vyhýbá, na toho vemte bič a hůl, to není člověk, to je vůl.
Olimant
Junior
Uživatelský avatar

Odeslat příspěvekod Vebloud 26. 4. 2012 11:01

A zkusil jsi si projít základní nějáký tutoriál na práci s db i bez objektu? Třeba fetch assoc apod?
Kód: Vybrat vše
$vysledek = $mysqli->query("SELECT `Jmeno`, `Prijmeni` FROM `uzivatele`");
echo 'Z databáze jsme získali ' . $vysledek->num_rows . ' uživatelů.';

while ($uzivatel = $vysledek->fetch_assoc())
{
  printf("%s %s \n", $uzivatel['Jmeno'], $uzivatel['Prijmeni']);
}


Mísžto fetch assoc použij fetch object
Žít a nechat žít, ty máš svůj názor, já mám svůj názor, já ti nebudu nutit svůj, nemusím souhlasit s tvým, ale udělám vše, abys ho mohl svobodně vyjádřit.
Vebloud
Ex-moderátor
Uživatelský avatar


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků