所以我终于决定通过学习使用PHP的PDO来更新2012年的PHP。到目前为止,一切都很顺利,但我不知道我的方式是否真的是最好的方式。
在这个例子中,我查询我的数据库以显示用户发布的帖子,然后为每个帖子显示2条评论。所以基本上我正在做的是抓住我的帖子,将其循环出来,然后在该循环中我查询数据库以查找每个帖子的前两个评论。然而,在我四处奔波并开始全年使用之前,我想我是否有更清洁的方法来做这件事。
因此,如果有人可以花些时间来查看这一小块代码,并告诉我是否有更清洁,也许更有效的方法,我真的很感激。随意挑剔!
<?php
$hostname = 'localhost';
$username = 'root';
$password = 'root';
$database = 'database';
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//Get Posts
$stmt = $dbh->prepare("SELECT * FROM posts");
$stmt->execute();
$result = $stmt->fetchAll();
}
catch(PDOException $e)
{
echo $e->getMessage();
}
//Loop through each post
foreach($result as $row) {
echo $row['post'];
//Get comments for this post
$pid = $row['id'];
$stmt = $dbh->prepare("SELECT * FROM comments WHERE pid = :pid LIMIT 2");
$stmt->bindParam(':pid', $pid, PDO::PARAM_STR);
$stmt->execute();
$c_result = $stmt->fetchAll();
//Loop through comments
foreach($c_result as $com) {
echo $com['comment'];
}
}
//Close connection
$dbh = null;
?>
答案 0 :(得分:3)
嗯,实际上是2个问题。
0.1。对于您正在使用的代码,它非常难看。使用原始API函数总是会使代码变得丑陋,乏味和重复。只运行一个查询,你就获得了五行! 难道你不认为只有一条线会更好吗?线只包含有意义的运算符?
$comments = $db->getAll("SELECT * FROM comments WHERE pid = :pid LIMIT 2",$row['id']);
0.2。对于算法 - 这是很好的。
假设您不要遍历所有数据库,但每页仅请求10-20个帖子,则额外的10-20个主键查找不会减慢你的申请。
0.3。奖金跟踪。
你真正想要考虑的是“业务逻辑/表示逻辑分离”。为什么不首先获取所有数据而不是开始输出?它会让你的代码更加干净。