Я использую этот метод для получения данных из db
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; } }
это то, что я хочу получить И это моя таблица
это мой код …
public function getModule() { $epreuve = $this->_db->get('epreuve', array('concour_code', '=', $this->data()->concour_code)); foreach($epreuve->results() as $epreuve){ echo "<tr><td>".$epreuve->designation."</td>" .$module = $this->_db->get('module', array('epreuve_code', '=', $epreuve->code )); foreach($module->results() as $module){ echo "<tr><td>".$epreuve->designation."</td>"; } "</tr>"; } }
но у меня есть эта ошибка
'' Catchable fatal error: Объект класса Database не может быть преобразован в строку ''
Ошибка, кажется, здесь:
echo "<tr><td>".$epreuve->designation."</td>" .$module = $this->_db->get('module', array('epreuve_code', '=',
Обратите внимание, что вы не закрыли echo
с помощью двоеточия, а точка перед $module
, поэтому PHP пытается вывести строку concat echo с классом $ module плюс итерацию внутри конкатенации. Вы не можете это сделать.
Выполните следующие действия:
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:
На ваш код
foreach($epreuve->results() as $epreuve){
А ТАКЖЕ
foreach($module->results() as $module){
Вы не должны использовать одно и то же имя переменной того, что вы итерируете. Попробуйте изменить его на
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>"; } }
ПРИМЕЧАНИЕ. HTML-таблица немного беспорядочна, я старался ее лучше всего понять. Измените его на свои нужды.