Нужна помощь в понимании кода 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