以下是我从正在阅读的一本书中获得的一段代码,但我不确定$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脚本打印吗
single-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; ?>
listposts.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; ?>
$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);
从这里的这些代码。可以解释为它准备运行一个"查询"。如果你注意到"?",那就是params打电话给后的去向
$query->execute($params);
$params的每个元素都替换查询中的"?",并对数据库运行查询。所以,如果你有2个"?"。您的$params必须有2个元素。如果您没有任何"?",您可以发送一个空数组,正如您从自己的代码中看到的那样。
$query = $this->db->prepare("SELECT * FROM posts");
$params = array();
有关更多示例,请参阅PDOStatement::execute as kmlnvm前面提到的