好的,所以我有这个代码,非常适合保存通过它的视频对象。我把它放在一起是因为有人说我不应该直接在Video类函数中进行查询,我应该有一个专门用于与数据库进行交互的外部类。
class VideoHandler {
private $myObject;
function __construct($object) {
$bind = array();
$bind[':src'] = $object->src;
$bind[':title'] = $object->title;
$bind[':desc'] = $object->desc;
$bind[':cat_id'] = $object->cat_id;
$bind[':game_id'] = $object->game_id;
$this->myObject = $object;
}
function save($conn) {
$sql = "INSERT INTO videos (`src`, `title`, `desc`, `cat_id`, `game_id`) VALUES (:src, :title, :desc, cat_id, :game_id)";
$query = $conn->prepare($sql);
$query->execute($this->myObject);
return "Video Saved!";
}
}
所以保存这一切都很好,但是我希望能够获得相关视频,获取热门视频,更新视频观看次数等。
因此,假设我想用视频添加视频:
function updateViews($conn) {
$sql = "UPDATE videos SET views=(:views+1) WHERE id=:id";
$query = $conn->prepare($sql);
$query->execute($this->myObject);
}
它不起作用,因为有太多的绑定变量(我知道我没有视图或id有界,但无论如何这都是无关紧要的)。
有没有更好的方法来构建VideoHandler,以便能够在不重复大量代码的情况下执行这些多功能?我认为的两个解决方案对我来说似乎不对。我想我可以在每个函数的构造函数中有多个绑定数组,以及存储数组的多个属性。
所以$ bind_save,$ bind_views,$ bind_related等。我只放入对象的各个部分,用于每个数组中的不同查询。
或者将对象传递给函数本身并将其中的所有内容绑定,但这似乎也不正确。
似乎很奇怪,我不能只将$ bind [':id']和$ bind [':views']添加到构造函数的数组中,只使用我上面发布的代码。也许我错过了什么,但为什么必须在PDO执行中使用每个数组?为什么我不能只拥有完整的数组,只使用$ sql查询中使用的数组?
无论如何,有没有比我提到的方式更好的方法呢?我觉得必须有。
由于