我想为未指定的框架/系统制作一些简单的对象/模型。
此外,我想使用MySQL作为我的数据的后端。
我的目标是简单实现 - 对配置文件进行小的更改,基本上就是这样。
我的问题是,我确信在使用我的模型时,我需要检查数据库表是否实际存在 - 如果没有,请为我创建表。
我在想这样的事情:
<?php
class MyObject
{
public function __construct()
{
$dal->query("SHOW TABLES LIKE 'MyTable'");
if($dal->num_rows() == 0)
$this->_createTables();
}
...
}
?>
但是我担心这个型号的性能 - 我正在寻找关于我的解决方案效率或更好的解决方案的确认。
答案 0 :(得分:2)
在我看来,根据您的应用程序的需要,您可能最好只在发生错误时检查此条件,并假设该表存在。这样的事情可以避免在每个实例上进行额外的查询(但是,您应该将检查放入自己的方法中)。
public function insert($data, $spiralingToDeath=false)
{
// (do actual insertion here)
if ($this->isError) {
// nothing obvious
if ($spiralingToDeath) {
// recursion check
throw new DBException("Tried to create a table and failed.");
} else {
$dal->query("SHOW TABLES LIKE 'MyTable'");
if($dal->num_rows() == 0) {
$this->_createTables();
}
// try again:
$this->insert($data, true);
}
}
}
答案 1 :(得分:1)
CREATE TABLE IF NOT EXISTS
怎么样?
答案 2 :(得分:0)
要求用户通过编辑器更改配置,并让编辑器在保存配置之前修改表格布局。
答案 3 :(得分:0)
另外,你可能想要考虑只调用'show tables',然后在私有var中在类级别缓存它,这样你可以稍后做一个简单的isset,例如。
isset($this->tables_cache[$db_name][$table_name])
这将允许您使用更多表格进行更好的扩展。
您还可以将其保存为文件系统中的json结构或序列化结构,将其加载到类的__construct上,然后(重新)将其保存在__destruct上。