以下是我从一本书中读到的一段代码,但我不确定如何 $ 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; ?>
答案 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