2013-06-26 3 views
1

Я уже несколько часов стучаю по этому простому запросу PDO. Каков правильный способ получения этого типа информации из нескольких баз данных MySQL. В этом запросе должны использоваться Fetch или FetchAll? поскольку он запрашивает несколько баз данных.Запрос не отображает информацию: PDO, MYSQL, PHP

Ниже я попытался преобразовать устаревший MySQL в PDO.

MySQL.

public function Comments($post_iD) { 
     $query = mysql_query(" 
           SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username 
           FROM comments C, users U 
           WHERE U.status = '1' 
           AND C.uid_fk = U.uiD 
           AND C.msg_id_fk = '$msg_id' 
           ORDER by C.com_id"); or die(mysql_error()); 

      while($row = mysql_fetch_array($query)) 
       $data[] = $row; 
      if(!empty($data)){ 
       return $data; 
      } 
    } 

PDO:

PUBLIC FUNCTION Comments($post_iD){ 
     $sth = $this->db->prepare(" 
           SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username 
           FROM comments C, users U 
           WHERE U.status = '1' 
           AND C.uid_fk = U.uiD 
           AND C.msg_id_fk = ? 
           ORDER by C.com_id"); 

     $sth->execute(array($post_iD)); 

     $data = $this->fetch(); 
     return $data; 
     } 
    } 

Это, как я уверен, отображение базы данных.

<?php 
     $commentsarray = $Wall->Comments($post_iD); 

     if($commentsarray){ 
      foreach($commentsarray as $data){ 
       $com_id  = $data['com_id']; 
       $comment = tolink(htmlcode($data['comment'])); 
       $time  = $data['created']; 
       $mtime  = date("c", $time); 
       $username = $data['username']; 
       $com_uid = $data['uid_fk']; 
       $cface  = $Wall->Profile_Pic($com_uid); 
    ?> 
       <div class="stcommentbody" id="stcommentbody<?php echo $com_id; ?>"> 
        <div class="stcommentimg"> 
         <img src="<?php echo $cface;?>" class="small_face" alt=<?php echo $username;?>"> 
        </div> 

        <div class="stcommenttext"> 
         <?php echo clear($comment); ?> 
        </div> 
      </div> 
<?php 
     } 
    } 
?> 

ответ

3

Вы хотите (с помощью fetchAll() по Вашему запросу $sth)

$data = $sth->fetchAll(); 

вместо (fetch() на подключение к БД $this->)

$data = $this->fetch(); 

как
fetch()Fetches the next row from a result set
, где
fetchAll()Returns an array containing all of the result set rows.

+0

Спасибо за ваш ответ Шон. Это просто дает мне Неустранимая ошибка: вызов неопределенного метода Wall_Updates :: fetchAll() в $ data = $ this-> FetchAll(); Есть идеи? * Как я пробовал это раньше * – iBrazilian

+1

Вам нужно сделать 'fetchAll()' в вашем запросе '$ sth', а не на вашем db-соединении' $ this-> '. Таким образом, это должно быть '$ data = $ sth-> fetchAll();' – Sean

+1

Согласовано +1. В качестве альтернативы используйте цикл while (как ваш код mysql) с помощью 'fetch()'. – showdev