我不确定什么是更好的做法或更现实的做法。我想从头开始创建一个目录系统,但不确定最好的方法是什么。
当我需要显示info.php?id=100
等信息时,我想我会使用对象。有这样的代码用于显示
Game.class.php文件
class Game {
private $name;
private $type;
private $database;
public function __construct($database, $id) {
$information = $database->select($id); // returns mysql_fetch_array
$this->database = $database;
$this->setName($information['name']);
$this->setType($information['type']);
}
public function __destruct() {
unset($this->name);
...
}
...
private function setName($name) {
$this->name = $name;
}
...
public function getName() {
return $this->name;
}
...
public function addToDatabase() {
// stuff here to check if it exists in the database or not
$database->insert('test', array('id' => '', 'name' => $this->name, 'type' => $this->type));
}
}
info.php?id = 100档
// already have __autload()
$id = sanitize($_POST['id']);
$item = new Game($db, $id);
echo "Item name: " . $item->getName() . " <br />";
但是当我添加或更新内容时,我并不需要创建对象add.php?name=XMen&type=GameBoy
我不想这样做:
$name = sanitize($_POST['name']); // sanitize
$type = sanitize($_POST['type']); // sanitize
$newObject = new Game($name, $type);
$newObject->addToDatabase();
我应该跳过创建一个对象并直接插入
$name = sanitize($_POST['name']); // sanitize
$type = sanitize($_POST['type']); // sanitize
$sql = "INSERT INTO test ('id', 'name', 'type') VALUES ('', $name, $type)";
mysql_query($sql);
或者如果我有数据库类
$name = sanitize($_POST['name']); // sanitize
$type = sanitize($_POST['type']); // sanitize
$db->insert('test', array('id' => '', 'name' => $name, 'type' => $type));
答案 0 :(得分:3)
要获得完全抽象,您可以查看第三方ORM。至少,你应该创建自己的数据库类。如果我只计划有一个数据库连接,我通常使用Singleton设计模式。
您不希望到处都是原始SQL语句,因为您可能需要切换到和/或支持不同版本的MySQL甚至不同的数据库。替换单个数据库管理对象比在整个代码中修复所有这些查询更容易。
我的一个数据库类很像你发布的第三个选项,它运行得很好。它有很多便利,比如insertArray(),getOneRow(),getOne(),getOneFromAllRows(),executeExternalFile(),以及所有类似SELECT的查询的可迭代结果集。
答案 1 :(得分:0)
对于此示例,似乎不需要首先创建对象。只需直接插入数据库即可。