在转换时我做错了什么呢

时间:2017-08-14 09:35:35

标签: php mysql pdo

我需要将这个mysql转换为pdo我尝试了以下但我认为它错了,因为我没有显示结果。是的,对你们中的一个人来说可能很容易,但pdo对我来说是个新闻,所以感谢你的帮助:)。

实际代码

$rowperpage = 3;

            // counting total number of posts
            $allcount_query = "SELECT count(*) as allcount FROM posts";
            $allcount_result = mysql_query($allcount_query);
            $allcount_fetch = mysql_fetch_array($allcount_result);
            $allcount = $allcount_fetch['allcount'];

            // select first 3 posts
            $query = "select * from posts order by id asc limit 0,$rowperpage ";
            $result = mysql_query($query);

            while($row = mysql_fetch_array($result)){

                $id = $row['id'];
                $title = $row['title'];
                $content = $row['content'];
                $shortcontent = substr($content, 0, 160)."...";
                $link = $row['link'];

            ?>
                <!-- Post -->
                <div class="post" id="post_<?php echo $id; ?>">
                    <h1><?php echo $title; ?></h1>
                    <p>
                        <?php echo $shortcontent; ?>
                    </p>
                    <a href="<?php echo $link; ?>" class="more" target="_blank">More</a>
                </div>

            <?php
            }
            ?>

我尝试了什么

 $rowperpage = 3;

        // counting total number of posts
        //$allcount_query = "SELECT count(*) as allcount FROM posts";
        //$allcount_result = mysql_query($allcount_query);

        $query = "SELECT count(*) FROM posts";
        $stmt = $db->prepare($query);       



        $allcount_fetch = $stmt->fetch(PDO::FETCH_ASSOC);
        $allcount = $stmt->fetchColumn();

        // select first 3 posts
        //$query = "select * from posts order by id asc limit 0,$rowperpage ";
        //$result = mysql_query($query);

        $qry = "select * from posts order by id asc limit 0,$rowperpage ";
        $stm = $db->prepare($qry);  

        while($row = $stm->fetch(PDO::FETCH_ASSOC)){

            $id = $row['id'];
            $title = $row['title'];
            $content = $row['content'];
            $shortcontent = substr($content, 0, 160)."...";
            $link = $row['link'];

有人能说出正确的方法吗?

1 个答案:

答案 0 :(得分:1)

prepare()execute()

一起使用

准备好的陈述基本上是这样的:

  1. 准备:创建一个SQL语句模板并发送给 数据库。某些值未指定,称为参数 (标有“?”)。示例:

    INSERT INTO mtTable VALUES(?, ?, ?)

  2. 数据库解析,编译和执行查询优化 SQL语句模板,并存储结果而不执行 它

  3. 执行:稍后,应用程序将值绑定到 参数,数据库执行语句。应用程序 可以根据需要多次执行语句 值

  4. 尝试以下代码

    <?php
    
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    
    $rowperpage = 3;
    $offset     = 0;
    
    // counting total number of posts
    $query = "SELECT count(id) AS allcount  FROM posts";
    $stmt  = $db->query($query)->fetchColumn();
    
    /******** The ABOVE QUERY LOOKS POINTLESS TO ME AS YOU NOT USING THE RESULTS FROM THAT QUERY*/
    
    // select first 3 posts
    
    $qry = "SELECT * FROM posts ORDER BY id ASC LIMIT ?,? ";
    $stm = $db->prepare($qry);
    $stm->execute(array($offset,$rowperpage));
    $results = $stm->fetchall(PDO::FETCH_ASSOC);
    
    if (count($results) > 0) {
    
        foreach ($results as $row) {
    
            $id           = $row['id'];
            $title        = $row['title'];
            $content      = $row['content'];
            $shortcontent = substr($content, 0, 160) . "...";
            $link         = $row['link'];
    
        }
    } else {
    
        echo "No records found";
    }
    ?>