OOP或MySQL调用。直接从MySQL创建对象或调用?

时间:2011-03-16 00:32:26

标签: php mysql

我不确定什么是更好的做法或更现实的做法。我想从头开始创建一个目录系统,但不确定最好的方法是什么。

当我需要显示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));

2 个答案:

答案 0 :(得分:3)

要获得完全抽象,您可以查看第三方ORM。至少,你应该创建自己的数据库类。如果我只计划有一个数据库连接,我通常使用Singleton设计模式。

您不希望到处都是原始SQL语句,因为您可能需要切换到和/或支持不同版本的MySQL甚至不同的数据库。替换单个数据库管理对象比在整个代码中修复所有这些查询更容易。

我的一个数据库类很像你发布的第三个选项,它运行得很好。它有很多便利,比如insertArray(),getOneRow(),getOne(),getOneFromAllRows(),executeExternalFile(),以及所有类似SELECT的查询的可迭代结果集。

答案 1 :(得分:0)

对于此示例,似乎不需要首先创建对象。只需直接插入数据库即可。