我正在学习,并且仍在努力掌握许多OOP概念的窍门,所以在阅读/回答问题时请记住这一点。
因此,面向对象编程的主要目的之一就是不要重复正确的操作。然而,当我创建方法时,我经常发现自己在查询数据库时重复相同的语句。从下面我创建的类的代码中可以看出。function getCategory()
{
$sql = "SELECT * FROM jobs";
$stmnt = $db->prepare($sql);
$stmnt->execute();
$results = $stmnt->fetchAll();
foreach ($results as $result) {
$cat[] = $result['category'];
}
return $this->category = $cat
}
function selectCategory($selectedCategory){
$sql = "SELECT * FROM jobs
WHERE category =:category";
$stmnt = $db->prepare($sql);
$stmnt->bindValue(':category', $selectedCategory);
$stmnt->execute();
$results = $stmnt->fetchAll();
foreach($results as $result){
$result= array('category' => $result['category'], 'headline' => $result['headline']);
}
return $this->category = $result
}// selectCategory
我的问题。
有没有办法/应该怎么做才能避免在我的方法中不断地编写相同的数据库查询?我觉得我有点不深入,但这不会阻止我尝试。欢迎任何帮助和建议(请记住我是初学者)
最佳答案
您可以运行查询以获取所有数据,然后使用PHP从获取的数据中提取数据。
但我不喜欢,而且效率不高。
您有两个不同的查询,因此需要调用,只需稍微改进代码,就可以创建这样的模型:class Category
{
private $db;
public function __construct(PDO $db)
{
$this->db = $db;
}
function getAll()
{
return $this->db->query('SELECT * FROM jobs');
}
function getByCategory($category){
$stmt = $this->db->prepare(
"SELECT * FROM jobs WHERE category =:category"
);
$stmt->bindValue(':category', $category);
$stmt->execute();
return $stmt->fetchAll();
}
}
这很好,而且不会重复