我正在创建一个类(数据映射(,它将帮助我简化模型类中的查询。 基本上,这个类(数据映射(与我的数据库类结合使用。
以前对于我的模型中的插入语句,我需要。
$db->query("INSERT INTO test(id,name) VALUES("id","name")");
现在,使用数据映射类,它将像
$datamap->create("test","id=id&name=name");
下面是我创建的 Datamap 类的代码片段。
function create($tablename,$variables){
$id=0;
$tbl = $this->creturnval($variables);
$tblVal = $tbl[0];
$tblData = $tbl[1];
$this->db->execute("INSERT into $tablename($tblVal) VALUES($tblData);");
$id = $this->db->lastInsertedId();
return $id;
}
function creturnval($variables){
$vars = explode("&",$variables);
$count = sizeOf($vars);
$tblVal = "";
$tblData = "";
for($i=0;$i<$count;$i++){
$d = explode("=",$vars[$i]);
$tblVal.= $d[0].",";
$tblData.= "'".$d[1]."'".",";
}
$tblVal = rtrim($tblVal, ',');
$tblData = rtrim($tblData, ',');
$return[0] = $tblVal;
$return[1] = $tblData;
return $return;
}
我担心的实际上是性能问题。以前在我的模型类中,如果我只使用 $db->query()
,它似乎更快,因为我不必经历 2 个函数。
现在,为了进行插入,我需要解析变量,拆分等,然后处理它。
我使用这个 Datamap 类的想法实际上是为了提供更多的可维护性和标准化。这是为了防止我所有的模型类在看起来不整洁的地方有sql语句。
您认为这会带来可能的性能问题吗?
PS:我正在使用我自己的框架,我为我的Web应用程序构建
感谢所有建议。
我认为编写SQL包装器的更常见方法是这样的:
$item = $datamap->create("test");
$item->setValue("id", $id);
$item->setvalue("name", $name);
$item->update(); // push to database
$datamap->create();
返回一个将保存记录值的对象。 setValue
和getValue
允许您访问它。 update
将新值推送到数据库。同样,您可以实现$datamap->get("test", 1234);
其中1234
是要获取的记录的 id。 get
返回与create
相同的对象,具有相同的函数。 然后update
将导致UPDATE
而不是INSERT
。使用 update
插入记录后,您可以使用 mysql_last_insert_id()
获取 id 并将其设置在对象中,以便在此之后可以对其执行UPDATE
。(对象必须跟踪它的"状态"(。
搜索后,我发现使用Zend_db会更好。 会使用它。