2015-03-08 4 views
-1

Я новичок в OOP и PDO. Заранее благодарю за любую помощь!PHP Выполнение запросов по результатам PDO

У меня возникла проблема с выводом результатов моего SQL-запроса на страницу.

Вот мой notes.inc.php

$note->tulosta_notet('notes'); 

в классе Примечание У меня есть метод

public function tulosta_notet($table) { 
     $sql ="SELECT * FROM " . $table . ""; 
     $result = $this->_db->query($sql); 

     echo "<br />"; 
     print_r($result); 

     foreach ($result as $row) { 
      print $row["id"] . "-" . $row["note_text"] ."<br/>"; 
     } 
    } 

я получаю правильные результаты с print_r($result);

Так запрос правильно, я просто не могу заставить строки правильно печатать на странице.

Вот результат print_r ($ result);

DB Object ([_pdo:DB:private] => PDO Object () 
[_query:DB:private] => PDOStatement Object ([queryString] => SELECT * FROM notes) 
[_error:DB:private] => [_results:DB:private] => Array ( 
[0] => stdClass Object (
[id] => 1 
[created] => 2015-03-08 13:50:43 [edited] => 2015-03-08 14:50:43 
[note_text] => hei hei moi moi hei hei hei [ 
user_id] => 1) 

[1] => stdClass Object ( 
[id] => 2 
[created] => 2015-03-08 14:23:55 
[edited] => 2015-03-08 15:23:55 
[note_text] => text text text text text text text text text text text text text text text text text text 
[user_id] => 1) 
) [_count:DB:private] => 2) 

Что я делаю неправильно?

Должен ли я делать цикл в notes.inc.php, что я должен возвращать из tulosta_notet(), чтобы заставить его работать? Благодаря

-E

вот var_dump ($ это -> _ дб); выход;

object(DB)#3 (5) { 
["_pdo":"DB":private]=> object(PDO)#4 (0) { } 
["_query":"DB":private]=> object(PDOStatement)#9 (1) { 
["queryString"]=> string(28) "SELECT * FROM notes" 
} 
["_error":"DB":private]=> bool(false) 
["_results":"DB":private]=> array(2) { 
[0]=> object(stdClass)#5 (5) { 
["id"]=> string(1) "1" 
["created"]=> string(19) "2015-03-08 13:50:43" 
["edited"]=> string(19) "2015-03-08 14:50:43" 
["note_text"]=> string(27) "hei hei moi moi hei hei hei" 
["user_id"]=> string(1) "1" 
} 

[1]=> object(stdClass)#10 (5) { 
["id"]=> string(1) "2" 
["created"]=> string(19) "2015-03-08 14:23:55" 
["edited"]=> string(19) "2015-03-08 15:23:55" 
["note_text"]=> string(90) "text text text text text text text text text text text text text text text text text text " ["user_id"]=> string(1) "1" 
} 
} ["_count":"DB":private]=> int(2) } 

запрос() в классе DB

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) { 
        // echo $param; 
        $this->_query->bindValue($x, $param); 
        $x++; 
        // echo $x."<br>"; 
       } 
      } 

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

     return $this; 
    } 
+0

Что такое $ это -> _ дб? Является ли это объектом класса «PDO» или это какая-то оболочка? – tkausl

+1

Вы пытаетесь перебрать $ results в виде массива, но это не массив. Это объект, содержащий параметры _query, _error и _results. Вероятно, вам понадобится запрос fetch/fetchAll после выполнения запроса. Кое-что сложно предложить, так как кажется, что вы не используете собственный класс pdo, ищите документацию для любого класса db, который вы используете. – JimL

+0

добавил результаты var_dump к оригинальному сообщению. DB - это отдельный класс, где у меня есть запрос(). Я добавлю его внутренности к оригинальному сообщению тоже –

ответ

0

в методе 'запроса' вы используете свободно интерфейс (вернуть $ это возвращает текущий объект). В результате, когда вы печатаете_r, объект печатается. Измените метод запроса или использовать функцию выборки также: общественная функция tulosta_notet ($ таблица) {

 $sql ="SELECT * FROM " . $table . ""; 
     $result = $this->_db->prepare($sql); 
     $res= $result->execute(); 

     for ($i=0;$i<count($res);$i++) { 
     print $res[$i]["id"] . "-" . $res[$i]["note_text"] ."<br/>"; 
     } 
} 
+0

См. Запрос(); что я добавил к своему оригинальному сообщению. Я выполняю как execute(), так и prepare() внутри него. $ this -> _ results = $ this -> _ query-> fetchAll (PDO :: FETCH_OBJ); –

+1

Я видел, что это не значит, что вы не используете эти команды, я полагаю, что вы эхо всего объекта. return $ this, при возврате объекта целиком. Это называется «плавным интерфейсом». Я не могу проверить ваш код, но если у вас есть ошибка, вам нужно как-то изменить свой метод запроса. –

+1

Спасибо Nikos за помощью. Я действительно сделал еще два метода для решения этой проблемы. –

Смежные вопросы