gpt4 book ai didi

php - MVC/PDO : how to build a model using PDO's prepared statements syntax?

转载 作者:行者123 更新时间:2023-11-29 04:17:14 25 4
gpt4 key购买 nike

我想为我的 PHP 应用程序构建一个模型类。它将具有用于根据方法的参数从数据库中选择/更新/插入/删除特定数据的方法。我只想使用准备好的语句。

这里是类应该是什么样子的概述:

class Database {

private $_db;

// Stores a PDO object (the connection with the database) within the $_db property
public function __construct($host, $user, $password) {...}

public function select() {...}

public function update() {...}

public function insert() {...}

public function delete() {...}

}

问题是我真的不知道该怎么做。假设我想从动物是狗的表“农场”中选择所有内容。该语句的语法如下:

$animal = 'dog';
$query = $this->_db->prepare('SELECT * FROM farm WHERE animal = :animal');
$query->execute(array(':animal' => $animal));

$result_set = $query->fetchAll();

这在类方法中实现起来非常复杂。如您所见,我调用了 execute() 方法,但我什至事先不知道是否会使用 WHERE 子句!

更糟糕的是:如果我以后想使用 LIMIT x, y 子句怎么办?

我应该询问哪些参数以及如何处理它们?我是否应该只要求参数是一个查询 + 将传递给 execute() 方法的多个变量?

这些类型的方法对我想做的事情是否合理?也许我应该为应用程序将执行的每个 MySQL 查询设置一个专用方法,但这相当复杂,因为它是一个大数据库和一个大应用程序。

大家怎么看?

提前致谢:P

最佳答案

您的 API 对我来说看起来毫无用处,因为在我看来它只是 PDO 的包装器。这样包装 PDO 有什么好处?

相反,让您的对象实际代表事物可能更有意义,例如:

namespace Project\Storage\Database;

class Farm
{
private $pdo;

public function __construct(\PDO $pdo)
{
$this->pdo = $pdo;
}

public function getAnimalsByType(string $animalType): AnimalCollection
{
$stmt = $this->pdo->prepare('SELECT * FROM farm WHERE animal = :animal');
$stmt->execute([
'animal' => $animalType,
]);

// alternatively use a factory to build this to prevent tight coupling
return new AnimalCollection($stmt->fetchAll());
}
}

旁注:忘掉 PHP 中的 MVC(这甚至是不可能的)。只关注更重要的separation of concerns .

关于php - MVC/PDO : how to build a model using PDO's prepared statements syntax?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38715426/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com