2016-02-27 184 views
1

在这段代码中,他给我这个probleme:致命错误:类PDOStatement对象的对象不能转换

fatal error: Object of class PDOStatement could not be converted to string in C:\xampp\htdocs\myjob\like_unlike\index.php on line 96

这是行96:

<div class="rate-count"><?php echo $rate_all_count; ?></div> 

这是完整的代码,如何可以解决这个问题?

<!DOCTYPE html> 
    <html> 
     <head> 
      <meta charset="utf-8" /> 
      <title>WebCodo :: Like & Dislike System With jQuery Ajax and PHP</title> 

      <link type="text/css" rel="stylesheet" href="css/style.css"> 
      <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 


     </head> 

     <body> 

     <?php 
     include 'config.php'; 
     $user_ip = $_SERVER['REMOTE_ADDR']; 
     $pageID = '38'; // The ID of the page, the article or the video ... 

     //function to calculate the percent 
     function percent($num_amount, $num_total) { 
      @$count1 = $num_amount/$num_total; 
      $count2 = $count1 * 100; 
      $count = number_format($count2, 0); 
      return $count; 
     } 

     // check if the user has already clicked on the unlike (rate = 2) or the like (rate = 1) 
      $dislike_sql = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE ip = "'.$user_ip.'" and id_item = "'.$pageID.'" and rate = 2 '); 
      $dislike_sql->execute(); 
      //$dislike_count = mysql_result($dislike_sql, 0); 

      $like_sql = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE ip = "'.$user_ip.'" and id_item = "'.$pageID.'" and rate = 1 '); 
      $like_sql->execute();   
      //$like_count = mysql_result($like_sql, 0); 

      // count all the rate 
      $rate_all_count = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = "'.$pageID.'"'); 
      try { 
       $rate_all_count->execute(); 
      } catch (Exception $e) { 
       echo 'Exception : ', $e->getMessage(), "\n"; 
      } 

      $rate_like_count = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = "'.$pageID.'" and rate = 1'); 
      $rate_like_count->execute(); 
      $rate_like_percent = percent($rate_like_count, $rate_all_count); 

      $rate_dislike_count = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item = "'.$pageID.'" and rate = 2'); 
      $rate_dislike_count->execute();   
      $rate_dislike_percent = percent($rate_dislike_count, $rate_all_count); 
    ?> 

    <script> 
     $(function(){ 
      var pageID = <?php echo $pageID; ?>; 

      $('.like-btn').click(function(){ 
       $('.dislike-btn').removeClass('dislike-h');  
       $(this).addClass('like-h'); 
       $.ajax({ 
        type:"POST", 
        url:"ajax.php", 
        data:'act=like&pageID='+pageID, 
        success: function(){ 
        } 
       }); 
      }); 
      $('.dislike-btn').click(function(){ 
       $('.like-btn').removeClass('like-h'); 
       $(this).addClass('dislike-h'); 
       $.ajax({ 
        type:"POST", 
        url:"ajax.php", 
        data:'act=dislike&pageID='+pageID, 
        success: function(){ 
        } 
       }); 
      }); 
      $('.share-btn').click(function(){ 
       $('.share-cnt').toggle(); 
      }); 
     }); 
    </script> 



     <div class="tab-cnt"> 

      <div class="tab-tr" id="t1"> 
       <div class="like-btn <?php if($like_count == 1){ echo 'like-h';} ?>">Like</div> 
       <div class="dislike-btn <?php if($dislike_count == 1){ echo 'dislike-h';} ?>"></div> 


       <div class="stat-cnt"> 
        <div class="rate-count"><?php echo $rate_all_count; ?></div> 
        <div class="stat-bar"> 
         <div class="bg-green" style="width:<?php echo $rate_like_percent; ?>%;"></div> 
         <div class="bg-red" style="width:<?php echo $rate_dislike_percent; ?>%"></div> 
        </div><!-- stat-bar --> 
        <div class="dislike-count"><?php echo $rate_dislike_count; ?></div> 
        <div class="like-count"><?php echo $rate_like_count; ?></div> 
       </div><!-- /stat-cnt --> 
      </div><!-- /tab-tr --> 

      </div><!-- /share-cnt --> 


     </div><!-- /tuto-cnt --> 





    </body> 
    </html> 
+0

在设置'$ rate_all_count,'在try-catch后添加此代码。 'print_r($ rate_all_count); exit;'告诉我它打印的是什么。 –

+0

PDOStatement Object([queryString] => SELECT COUNT(*)FROM wcd_yt_rate WHERE id_item =“38”)@JoshS。 –

+0

这是在try catch之后?在你运行'$ rate_all_count-> execute();'?之后 –

回答

0
// 1) prepare the statement 
$rate_all_count = $DB_con->prepare('SELECT COUNT(*) FROM wcd_yt_rate WHERE id_item=:iid') 
// 2) execute it (with some parameters) 
$rate_all_count->execute(array(':iid'=>$pageID)); 
// 3) fetch the result 
// - in this case it's just one row having one column 
// so, let's shift the element from the array returned by stmt->fetch() 
// and assign it to a variable 
$rate_all_count_value = array_shift($rate_all_count->fetch(PDO::FETCH_NUM)); 

// 4) do something with the value 
echo $rate_all_count_value; 

你试图呼应语句对象跳过第3步。

还看到:http://docs.php.net/pdo.prepared-statements

+0

为什么使用$ stmt? –

+0

对不起,错字...我是习惯的生物,我的语句实例变量通常被称为$ stmt。 – VolkerK

+0

Oki谢谢@VolkerK –

相关问题