Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php OOP或MySQL调用。直接从MySQL生成对象或调用?_Php_Mysql - Fatal编程技术网

Php OOP或MySQL调用。直接从MySQL生成对象或调用?

Php OOP或MySQL调用。直接从MySQL生成对象或调用?,php,mysql,Php,Mysql,我不确定什么是更好的练习还是更现实的练习。我希望从头开始创建一个目录系统,但不确定最好的方法是什么 我在想,当我需要显示诸如,info.php?id=100等信息时,我会使用对象。有这样的代码来显示 Game.class.php文件 class Game { private $name; private $type; private $database; public function __construct($database, $id) {

我不确定什么是更好的练习还是更现实的练习。我希望从头开始创建一个目录系统,但不确定最好的方法是什么

我在想,当我需要显示诸如,
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));
    }
}
// already have __autload()

$id = sanitize($_POST['id']);
$item = new Game($db, $id);
echo "Item name: " . $item->getName() . " <br />";
info.php?id=100文件

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));
    }
}
// already have __autload()

$id = sanitize($_POST['id']);
$item = new Game($db, $id);
echo "Item name: " . $item->getName() . " <br />";
相反,我应该跳过创建对象,直接插入

$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));

对于本例,似乎没有必要先创建对象。只需直接插入数据库。

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

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

我的一个数据库类与您发布的第三个选项非常相似,它工作得非常好。它有许多方便之处,如insertArray()、getOneRow()、getOne()、getOneFromAllRows()、executeExternalFile(),以及所有类似SELECT的查询的可迭代结果集