0

表示するコメントを 2 つに制限して PDO を使用して MySQL からコメントを取得していますが、クエリはコメントを取得せず、何も出力しないため、print_r も var_dump できません。クエリ自体に問題があるはずだと思いますが、数え切れないほどの時間機能していないと思ったので、経験豊富なプログラマーに尋ねることにしました。

ページに出力されるデータはありません。second_count 変数の問題なのか、post_iD 変数の問題なのかわかりません。

1. while ループを正しく使用していますか?

2. while ループと foreach のどちらを使用した方がよいですか?

3. var_dump および print_r 関数は、クエリまたは PHP.INI のエラーが原因で動作しませんか?

PDOでデータを取得する方法は次のとおりです。

PUBLIC FUNCTION Comments( $post_iD,$second_count ){
    if($second_count){
        $sth = $this->db->prepare("
                                SELECT C.com_id, C.uid_fk, C.comment, C.created, U.username, U.photo
                                FROM comments C, users U 
                                WHERE U.status = '1' 
                                AND C.uid_fk = U.uiD 
                                AND C.msg_id_fk = :postiD
                                ORDER BY C.com_id ASC LIMIT :second, 2");
        $sth->execute(array(':postiD' => $post_iD, ':second' => $second_count));

        while( $row = $sth->fetchAll())
            $data[] = $row;
        if(!empty($data)){
            return $data;
       }
   }
}

そして、これが私のページに情報を表示しようとしている方法です。

<?php
    $commentsarray      = $Wall->Comments( $post_iD, 0 );
    $x=1; 

    if($x){
        $comment_count  = count($commentsarray);
        $second_count   = $comment_count-2;

        if($comment_count>2){
?>
        <div class="comment_ui" id="view<?php echo $post_iD; ?>">
            <a href="#" class="view_comments" id="<?php echo $post_iD; ?>">View all<?php echo $comment_count; ?> comments</a>
        </div>

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

    if( $commentsarray ){
        foreach($commentsarray as $data){
            $com_id     = $data['com_id'];
            $comment    = tolink(htmlcode($data['comment'] ));
            $time       = $data['created'];
            $mtime      = date("g:i", $time);
            $username   = $data['username'];
            $com_uid    = $data['uid_fk'];
            $photo      = $data['photo'];

?>
            <div class="stcommentbody" id="stcommentbody<?php echo $com_id; ?>">
                <div class="stcommentimg">
                    <img src="<?php echo $photo;?>" class="small_face">
                </div> 

                <div class="stcommenttext">
                    <?php if($uiD == $com_uid || $uiD == $post_iD ){ ?>
                        <a class="stcommentdelete" href="#" id="<?php echo $com_id;?>" title="Delete Comment"></a>
                    <?php } ?>

                    <div class="stmessage"><?php echo clear($comment); ?></div>
                </div>
                <div class="stime"><a href='' title='<?php echo $time;?>' class="timeposted"><?php echo $mtime;?> — Like</a></div>
            </div>
<?php
        } 
    }
?>
4

1 に答える 1

0

1.単にこのように:

$data = $sth->fetchAll();

if(!empty($data) AND count($data) > 0){
   return $data;
}

whileで作業する必要はありませんfetchAll

2.すべてのクエリで Exception を使用する方がよいでしょう。そうすれば、エラーがあるかどうかを確認できます。

例えば

try
{
   //your PDO stuffs here
}
catch (PDOException $e)
{
  echo $e->getMessage();
}
于 2013-06-29T00:41:21.423 に答える