Нужна помощь в понимании кода PHP

Ниже приведен фрагмент кода, который я получил из книги, которую читаю, но я не уверен, как переменные $params и $query связаны друг с другом. Более конкретно, что происходит в строке "$query->execute($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 ответа

$query->execute($params) его PDOStatement::execute($input_parameters) см. также http://php.net/manual/en/pdostatement.execute.php

ЧТО ПРОИСХОДИТ?

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

Из этого кода здесь. Это может быть объяснено тем, что он подготовлен для запуска "запроса". И если вы заметили, что "?", Вот куда идут параметры после вызова

$query->execute($params);

Каждый элемент $ params заменяет "?" в запросе и запустите запрос к базе данных. Так что, если у вас есть 2 "?". Ваши $ params должны иметь 2 элемента. Если у вас нет "?" вы можете отправить пустой массив, как вы можете видеть из своего собственного кода.

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

для получения дополнительной информации см. PDOStatement::execute, как уже упоминалось, kmlnvm

Другие вопросы по тегам