我一直写2个函数,例如,一个用于插入,一个用于编辑
添加:
function add_bank($vars = array()) {
$sql = "INSERT INTO BANK (Name, Var1, Var2, ...., Var7) VALUES (?, ?, ?, ..., ?)";
$name = isset($vars[Name]) ? $vars[Name] : "";
...
$var7= isset($vars[Var7]) ? $vars[Var7] : "";
$rs = $db->prepare($sql);
$rs->execute(array($name, ..., $var7));
$id = $db->lastInsertId();
return $id;
}
编辑:
function edit_bank($idBank, $vars = array()) {
$sql = "UPDATE BANK SET ";
$v = array();
if ( isset($vars['Name']) ) {
$sql .= "Name = ?, ";
$v[] = $vars['Name'];
}
...
..
if ( isset($vars['Var7']) ) {
$sql .= "Var7= ?, ";
$v[] = $vars['Var7'];
}
$sql = rtrim($sql, ", ");
$sql .= " WHERE ID = ?";
$v[] = $idBank;
$rs = $db->prepare($sql);
$rs->execute($v);
}
现在,每次我需要向表中添加新字段时,我总是要编辑这两个函数...
我想减少问题,仅编辑edit_bank函数并保留add_bank函数。
我正在考虑这样的解决方案:
function add_bank($vars = array()) {
$sql = "INSERT INTO BANK";
$rs = $db->prepare($sql);
$rs->execute();
$id = $db->lastInsertId();
edit_bank($id, $vars);
return $id;
}
但似乎查询:$sql = "INSERT INTO BANK"
;无效。有解决办法吗?
答案 0 :(得分:1)
如果我理解正确,您只想插入一个空行,请从自动增量列获取新的ID,然后使用所需的数据对其进行更新。我在某些情况下亲自使用过此方法,但看不到任何问题。
您可以插入具有所有默认值的新行,如下所示:
INSERT INTO BANK () VALUES();
或者,如果ID
是自动递增(看起来是这样),则可以执行以下操作:
INSERT INTO BANK SET ID = NULL;
为此,请注意,所有列都必须具有默认值,或者需要确保关闭STRICT_TRANS_TABLES
,否则可能会出错。
现在,您应该有一个新的ID,并且有一个空行要编辑。
答案 1 :(得分:0)
您可能想看看replace into
。
REPLACE的工作原理与INSERT完全相同,不同之处在于,如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除该旧行。请参见第12.2.5节“ INSERT语法”。
这样,您可以创建查询,例如:
$sql = "INSERT INTO BANK (Id, Name, Var1, Var2, ...., Var7) VALUES (?, ?, ?, ..., ?)";
if (NEED_TO_EDIT) {
$Id = $idBank;
} else {
$Id = null;
}
$rs = $db->prepare($sql);
...
请注意,这不是ansi sql标准。