需要帮助理解PHP代码

时间:2015-03-05 04:41:41

标签: php pdo

以下是我从一本书中读到的一段代码,但我不确定如何 $ params $ query 变量彼此相关。更具体地说,行" $ query->执行($ params);" $ params变量的目的是什么?非常感谢你提前。

<?php
Class Posts {
    public $db = '';
    public function __construct(){

        try {
            $this->db = new PDO("mysql:host=localhost;dbname=testposts", "username", "password");
            $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $this->index(); 
        } catch (PDOException $e) {
            $e->getMessage();
        }

    }

    public function index(){
        $id = 0;
        $posts = array();
        $template = '';
        if (!empty($_GET['id'])){
            $id = $_GET['id'];
        }

        try {
            if (!empty($id)){
                $query = $this->db->prepare("SELECT * FROM posts WHERE id = ?");
                $params = array($id);
                $template = 'single-post.php';
            } else {
                $query = $this->db->prepare("SELECT * FROM posts");
                $params = array();
                $template = 'list-posts.php';
            }
            $query->execute($params);
            for ($i = 0; $row = $query->fetch(); $i++) {
                $posts[] = array('id' => $row['id'], 'content' => $row['content']);
            }
        } catch (PDOException $e){
            $e->getMessage();
        }
        $query->closeCursor();
        $db = null;
        require_once($template);
    }
}

    enter code here

$posts = new Posts();

?>

这是用于打印帖子的脚本。它的打印好像数据库中有多个帖子一样。它应该是那样的吗?

任何人都可以解释为什么它总是使用list-posts.php脚本进行打印吗?

单post.php中

<?php foreach ($posts as $post): ?>
    <h1>Post #<?php echo htmlspecialchars($post['id']); ?></h1>
    <hr>
    <?php echo htmlspecialchars($post['content']); ?>
    <a href="http://localhost/other/posts.php">Back to Post List</a>
<?php endforeach; ?>

列表posts.php:

<h1>List of Blog Posts</h1>
<?php foreach ($posts as $post): ?>
    <h3>Post # <?php echo htmlspecialchars($post['id']); ?></h3>
    <?php echo htmlspecialchars($post['content']); ?>
    <a href="http://localhost/other/posts.php?id=<?php 
        echo htmlspecialchars($post['id']); ?>">Read More</a>
    <hr>
<?php endforeach; ?>

2 个答案:

答案 0 :(得分:0)

$query->execute($params)PDOStatement::execute($input_parameters)也见http://php.net/manual/en/pdostatement.execute.php

答案 1 :(得分:0)

发生了什么?

$query = $this->db->prepare("SELECT * FROM posts WHERE id = ?");
$params = array($id);

从这些代码到这里。可以解释它准备运行&#34;查询&#34;。如果你注意到那个&#34;?&#34;那就是那些在你打电话后去的地方

$query->execute($params);

$ params的每个元素都会替换&#34;?&#34;在查询中并运行查询到数据库。所以如果你有2&#34;?&#34;。你的$ params必须有2个元素。如果你没有任何&#34;?&#34;您可以发送一个空数组,如您自己的代码所示。

$query = $this->db->prepare("SELECT * FROM posts");
$params = array();

更多示例,请参阅PDOStatement::execute已提及的kmlnvm