2016-04-23 2 views
1

ich diese Methode bin mit Daten von bekommen dbObjekt der Klasse Datenbank kann nicht in einem String konvertiert werden

class Database { 
    private static $_instance = null; 
    private $_pdo, 
      $_query, 
      $_error = false, 
      $_results, 
      $_count = 0; 

    private function __construct() { 
     try { 
      $this->_pdo = new PDO('mysql:host='.Config::get('mysql/host').';dbname='.Config::get('mysql/db'),Config::get('mysql/username'),Config::get('mysql/password')); 
     } catch (PDOException $e) { 
      die($e->getMessage()); 
     } 
    } 

    public static function getInstance() { 
     if (!isset(self::$_instance)) { 
      self::$_instance = new Database(); 
     } 
     return self::$_instance; 
    } 

    public function query($sql, $params = array()) { 
     $this->_error = false; 
     if ($this->_query = $this->_pdo->prepare($sql)) { 
      $x = 1; 
      if (count($params)) { 
       foreach ($params as $param) { 
        $this->_query->bindValue($x, $param); 
        $x++; 
       } 
      } 

      if ($this->_query->execute()) { 
       $this->_results = $this->_query->fetchAll(PDO::FETCH_OBJ); 
       $this->_count = $this->_query->rowCount(); 
      } else { 
       $this->_error = true; 
      } 
     } 

     return $this; 
    } 

    public function action($action, $table, $where = array()) { 
     if (count($where) === 3) { 
      $operators = array('=','>','<','>=','<=','<>'); 

      $field  = $where[0]; 
      $operator = $where[1]; 
      $value  = $where[2]; 

      if (in_array($operator, $operators)) { 
       $sql = "{$action} FROM {$table} WHERE ${field} {$operator} ?"; 
       if (!$this->query($sql, array($value))->error()) { 
        return $this; 
       } 
      } 
     } 
     return false; 
    } 

    public function get($table, $where) { 
     return $this->action('SELECT *', $table, $where); 
    } 

    public function delete($table, $where) { 
     return $this->action('DELETE', $table, $where); 
    } 

    public function insert($table, $fields = array()) { 
     if (count($fields)) { 
      $keys = array_keys($fields); 
      $values = null; 
      $x  = 1; 

      foreach ($fields as $field) { 
       $values .= '?'; 
       if ($x<count($fields)) { 
        $values .= ', '; 
       } 
       $x++; 
      } 

      $sql = "INSERT INTO {$table} (`".implode('`,`', $keys)."`) VALUES({$values})"; 

      if (!$this->query($sql, $fields)->error()) { 
       return true; 
      } 
     } 
     return false; 
    } 

    public function update($table, $id, $fields = array()) { 
     $set = ''; 
     $x  = 1; 

     foreach ($fields as $name => $value) { 
      $set .= "{$name} = ?"; 
      if ($x<count($fields)) { 
       $set .= ', '; 
      } 
      $x++; 
     } 

     $sql = "UPDATE {$table} SET {$set} WHERE id = {$id}"; 

     if (!$this->query($sql, $fields)->error()) { 
      return true; 
     } 
     return false; 
    } 

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

    public function first() { 
     return $this->_results[0]; 
    } 

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

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

this is what i want to getUND this is my table

dies ist mein Code ...

aber ich habe diesen Fehler

‚‘ Abfangbare fatale Fehler: Objekt der Klasse Datenbank nicht in String umgewandelt werden könnte ‚‘

+0

Wie machen Sie die Datenbankverbindung? –

+0

zeigen Sie die gesamte Datenbank-Klasse, wenn möglich, oder zumindest die Funktionen/Methoden, die Sie oben genannt haben like results() – Vincent

+0

Ich habe die volle Klasse zum Thema :) – acharmat

Antwort

0

Der Fehler scheint hier zu sein:

echo "<tr><td>".$epreuve->designation."</td>" 
    .$module = $this->_db->get('module', array('epreuve_code', '=', 

Beachten Sie, dass Sie nicht echo mit Semikolon geschlossen haben , und es gibt einen Punkt vor $module, also versucht PHP, concat echo string mit der Klasse $ module plus der Iteration innerhalb der Verkettung zu stringieren. Du kannst das nicht tun.

Gehen Sie wie folgt:

public function getModule() { 
    $epreuve = $this->_db->get('epreuve', array('concour_code', '=', $this->data()->concour_code)); 

    foreach($epreuve->results() as $epreuve){ 
     echo "<tr>"; 
     echo "<td>".$epreuve->designation."</td>"; 
     $module = $this->_db->get('module', array('epreuve_code', '=', $epreuve->code));    
     foreach($module->results() as $module){ 
      echo "<td>".$epreuve->designation."</td>"; 
     } 
     echo "</tr>"; 
    } 

} 

Suggesiton:

Auf Ihrem Code

foreach($epreuve->results() as $epreuve){ 

UND

foreach($module->results() as $module){ 

Sie sollten nicht die gleichen Variablennamen von dem, was verwenden Sie iterieren. Versuchen Sie es ändern zu

public function getModule() { 
    $epreuve = $this->_db->get('epreuve', array('concour_code', '=', $this->data()->concour_code)); 

    foreach($epreuve->results() as $epreu){ 
     echo "<tr>"; 
     echo "<td>".$epreu->designation."</td>"; 
     $module = $this->_db->get('module', array('epreuve_code', '=', $epreu->code));    
     foreach($module->results() as $mod){ 
      echo "<td>".$epreu->designation."</td>"; 
     } 
     echo "</tr>"; 
    } 
} 

HINWEIS: Die HTML-Tabelle ist ein bisschen chaotisch ich am besten versucht, es zu verstehen. Ändern Sie es nach Ihren Bedürfnissen.

+0

danken es uns gearbeitet ... was soll ich tun, wenn ich eine andere Bedingung für exemple $ module = $ this hinzufügen möchten -> _ db-> get ('note_condidat', array ('modul_code', '=',. $ epreu-> code.'AND '. $ modul-> condidat_concour_id.' = '$ this-> data() -> ID.)); – acharmat

+0

Denken Sie daran, die Antwort als die richtige Antwort zu markieren. Für Ihre Frage versuchen Sie diese https: //gist.github.com/Falmar/b92b29684c297169f62026c827d66637 –

+0

Ich habe diesen Fehler ihr Fatal error:() Hinweis auf eine Elementfunktion Ergebnisse Aufruf: thath der Code $ module = $ this ist -> _ db-> get ('note_condidat', array ( Array ('Modul_Code', '=', $ Epreu-> Code, 'UND'), Array ('Condidat_Concour_ID', '=', $ this-> Daten() -> ID) )); also ich versuche, Benutzer-ID zu erhalten, um es mit der Condidat_condour_id zu vergleichen – acharmat

Verwandte Themen