gpt4 book ai didi

php - OOP 或 MySQL 调用。生成对象还是直接从 MySQL 调用?

转载 作者:行者123 更新时间:2023-11-29 02:06:21 25 4
gpt4 key购买 nike

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

我想我在需要显示信息时使用对象,例如 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 />";

但是当我添加或更新东西时,我真的不需要为 like 创建对象 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));

最佳答案

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

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

我的一个数据库类与您发布的第三个选项非常相似,而且效果很好。它具有许多便利功能,例如 insertArray()、getOneRow()、getOne()、getOneFromAllRows()、executeExternalFile(),以及适用于所有类似 SELECT 的查询的可迭代结果集。

关于php - OOP 或 MySQL 调用。生成对象还是直接从 MySQL 调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5319705/

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